DllProc не определен в FPC ?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение Sphinx » 09.01.2006 13:50:43

В Delphi, чтобы получить обработку DllMain на Сишный манер, достаточно было описать процедуру DllMain(dwReason: DWORD); stdcall; а потом написать:
Код: Выделить всё
begin
 DllProc := @DllMain;
 DllMain(DLL_PROCESS_ATTACH);
end.


Так вот, если этот код попробовать скомпилировать под FPC (пробовал под версией 2.0.0) то на строку DllProc := @DllMain; компилятор ругается, мол не определена переменная DllProc.

Режим совместимости выставлен как {$MODE DELPHI}.

Получается в FPC такой "фокус" не проходит, или у меня радиус кривизны рук зашкалил ? :unsure:
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение serg_iv » 09.01.2006 19:58:43

глянь сюда, может поможет разобраться?
<a href='http://www.freepascal.ru/article//freepascal/20050520001454/#dynlibs-use' target='_blank'>http://www.freepascal.ru/article//freepasc...54/#dynlibs-use</a>
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение Sphinx » 10.01.2006 12:54:59

serg_iv
Я это читал так-то...
Может меня поняли неправильно...

Вобщем вот примерный код (набросаю прямо тут - могу очепятаться где-нибудь, не пинайте сильно)

Есть INC файл Dll.inc, где кроме всего прочего есть такие строки:
Код: Выделить всё
{IFDEF FPC}
 {$MODE DELPHI}
{$ENDIF}


и есть файл проекта
Код: Выделить всё
library Dll;

{$INCLUDE Dll.inc}

uses
 Windows,
 MyFunc in 'MyFunc.pas',  // тут определены CreateData и DeleteData
 <others pas files>;

procedure DllMain(dwReason: DWORD); stdcall;
begin
 case dwReason of
   DLL_PROCESS_ATTACH: CreateData;
   DLL_PROCESS_DETACH: DeleteData;
 end;
end;

exports
 <Some Function From other pas files>;

begin
 DllProc := @DllMain;  // вот тут компилятор Free Pascal`я ругается, а в Delphi все ОК
 DllMain(DLL_PROCESS_ATTACH);
end.
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Janus » 10.01.2006 19:54:31

Попробуй так:

@DllProc := @DllMain;
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение Sphinx » 11.01.2006 11:20:19

Janus
неа....тот же шарик, вид с боку

<!--QuoteBegin-"FPC"+--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата ("FPC")</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Error: Identifier not found "DllProc"[/quote]
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение virt » 12.01.2006 00:10:36

В документации не нашел ,значит такре просто не поддерживается. Или по другому называется?
virt
новенький
 
Сообщения: 35
Зарегистрирован: 01.12.2005 12:31:41

Сообщение PVOzerski » 13.01.2006 14:30:57

Кажется, я разобрался...

Сейчас в FPC реализован другой механизм, нежели в Delphi. В модуле system для некоторых платформ (включая win32) определено вот такое:

type
TDLL_Process_Entry_Hook = function (dllparam : longint) : longbool;
TDLL_Entry_Hook = procedure (dllparam : longint);

const
Dll_Process_Attach_Hook : TDLL_Process_Entry_Hook = nil;
Dll_Process_Detach_Hook : TDLL_Entry_Hook = nil;
Dll_Thread_Attach_Hook : TDLL_Entry_Hook = nil;
Dll_Thread_Detach_Hook : TDLL_Entry_Hook = nil;

На это можно подключать свои обработчики.

Вообще-то я сейчас послал им патчик, который должен добавить DllProc для Win32, Win64, WinCE и Netware (libc). Хорош ли он - судить не берусь.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение PVOzerski » 13.01.2006 14:34:04

Кстати, а почему в примерчике DllMain объявлен как stdcall? Из текста дельфийского системного модуля это никак не следует, скорее - наоборот.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение Sphinx » 15.01.2006 17:30:58

PVOzerski
Саму идею такого подключения "подсмотрел" в примере по реализации хуков на "Мастерах Делфи" <a href='http://delphimaster.ru/articles/hooks/index.html' target='_blank'>вот тут</a>
И там в примере обозначено stdcall, собственно с тех пор и пишу так, если считаю целесообразным вызывать такую процедуру.

Спасибо за ответ !!!
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

Рейтинг@Mail.ru