Главная страница
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.04 c
1-1126763538
Ярослав
2005-09-15 09:52
2005.10.09
Определить сужествование MDI Child формы


1-1126513281
Yozch1
2005-09-12 12:21
2005.10.09
Максимизация окна


2-1125246461
Андрей Молчанов
2005-08-28 20:27
2005.10.09
ShellExecute


14-1126844828
Rentgen
2005-09-16 08:27
2005.10.09
COM1 -> Ethernet -> COMn


8-1116437553
aleman
2005-05-18 21:32
2005.10.09
Кусочки в память+play