![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятка с директивами компилятора
Piter © (2005-09-17 12:57:00)Вот модуль:
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}- то работает...
Piter (2005-09-17 13:47:00) [1]TUser © (17.09.05 13:43) [3]
блиииин... во я дурак, башка едет... как я мог не заметить :(((
Piter (2005-09-17 13:45:00) [2]Вот выкладываю проект тестовый, простенький:
http://piter.pechora.org/temp/test_include.zip(2 Kbyte)
У меня он НЕ компилируется, выдается:
"[Error] dc_api.pas(1): Unsatisfied forward or external declaration: 'ConvertVersionToString'"
TUser (2005-09-17 13:43:00) [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:38:00) [4]TUser © (17.09.05 13:32) [1]
как так...
TUser (2005-09-17 13:32:00) [5]У меня нормально заработало.