Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.015 c
4-1124090761
O
2005-08-15 11:26
2005.10.09
WinIO


2-1125732058
Гость22
2005-09-03 11:20
2005.10.09
Как подключиться к серверу Firebird?


6-1118655176
Dimitrij
2005-06-13 13:32
2005.10.09
работа с FTP


14-1126875564
Starcom
2005-09-16 16:59
2005.10.09
Изменился ли Сетевой сленг?


2-1125308192
Zikmu
2005-08-29 13:36
2005.10.09
Запуск приложений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский