Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Непонятка с директивами компилятора   Найти похожие ветки 

 
Piter ©   (2005-09-17 12:57) [0]

Вот модуль:

unit dc_api;

interface

uses SysUtils, Windows;

 {$define DC_API_INTERFACE}

 {$include dc_helper.inc}

 {$undef DC_API_INTERFACE}

implementation

 {$define DC_API_IMPLEMENTATION}

 {$include dc_helper.inc}

 {$undef DC_API_IMPLEMENTATION}

end.


А вот файл dc_helper.inc:

{$IFNDEF DC_HELPER}
{$DEFINE DC_HELPER}

 {$ifdef DC_API_INTERFACE}
 function ConvertVersionToString(ver: DWORD): string;
 {$ENDIF}

 {$IFDEF DC_API_IMPLEMENTATION}
 function ConvertVersionToString(Ver: DWORD): string;
 var
   a,b,c: integer;
 begin
   a := (Ver and $00FF0000) shr 16;
   b := (Ver and $0000FF00) shr 8;
   c := (Ver and $000000FF);
   Result := IntToStr(a)+"."+IntToStr(b)+"."+IntToStr(c);
 end;
 {$ENDIF}

{$ENDIF}


Почему-то пишет: "[Error] dc_api.pas(1): Unsatisfied forward or external declaration: "ConvertVersionToString""

Но почему? Вроде все правильно - в Implementation секцию dc_api должен подставляется код реализации ConvertVersionToString... В чем ошибка?

Интересно, что если убрать {$IFNDEF DC_HELPER} и завершающий {$ENDIF} - то работает...


 
TUser ©   (2005-09-17 13:32) [1]

У меня нормально заработало.


 
Piter ©   (2005-09-17 13:38) [2]

TUser ©   (17.09.05 13:32) [1]

как так...


 
TUser ©   (2005-09-17 13:43) [3]

Вот так

// uDef.pas

unit uDef;

interface

{$define intf}

{$include iDef.inc}

{$undef intf}

implementation

{$define impl}

{$include iDef.inc}

{$undef impl}

end.

// =======

// iIDef.inc

{$ifdef intf}
 procedure Test;
{$endif}

{$ifdef impl}
 procedure Test;
 begin
   writeln ("test ok");
 end;
{$endif}


А ты просто один раз сказал ifndef DC_HElper, он у тебя определился. А когда второй раз вставил тот же файл - DC_Helper уже определен, поэтому не вставляется ничего. Поэтому нет реализации объявленной функции.


 
Piter ©   (2005-09-17 13:45) [4]

Вот выкладываю проект тестовый, простенький:

http://piter.pechora.org/temp/test_include.zip (2 Kbyte)

У меня он НЕ компилируется, выдается:

"[Error] dc_api.pas(1): Unsatisfied forward or external declaration: "ConvertVersionToString""


 
Piter ©   (2005-09-17 13:47) [5]

TUser ©   (17.09.05 13:43) [3]

блиииин... во я дурак, башка едет... как я мог не заметить :(((



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.031 c
1-1126852933
tes
2005-09-16 10:42
2005.10.09
не удаляются элементы


14-1127049069
Piter
2005-09-18 17:11
2005.10.09
Програма для просмотра свойств WMV видео


1-1126875099
webpauk
2005-09-16 16:51
2005.10.09
Определение property


14-1126670926
X9
2005-09-14 08:08
2005.10.09
Антивирус Касперского - MustDie?


14-1127210398
ПЛОВ
2005-09-20 13:59
2005.10.09
Напомните...