Главная страница
    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.46 MB
Время: 0.013 c
14-1127196479
_lbp
2005-09-20 10:07
2005.10.09
Структура таблицы


14-1126765604
NailMan
2005-09-15 10:26
2005.10.09
Зацените моих тараканов в голове!


3-1124867754
carmen
2005-08-24 11:15
2005.10.09
Сортировка символьных полей


1-1126776541
ORMADA
2005-09-15 13:29
2005.10.09
FastDIB


14-1127145267
ArtemESC
2005-09-19 19:54
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский