Hallo,
Ich habe zig Foren etc. durchpflügt und meinte begriffen zu haben, wie man ein
DLL mit Hilfe einer call-back Funktion initialisieren kann. Mein
Dll - etwas abgekürzt - sieht so aus:
Delphi-Quellcode:
library Rpc_2;
uses
System, SysUtils, Classes, Windows,
AT91def in 'AT91def.pas',
RPC in 'RPC.pas',
Link in 'Link.pas' {CIF};
{$R *.res}
var
DLLProcNext: procedure(Reason: Integer); stdcall = nil;
DLLProc: TDLLProc;
// exported functions ==========================================================
function WhoAmI(var v: Cardinal; var s: PChar): EStatus; stdcall; export;
var str: string;
begin
Result := Remote.WhoAmI(v, str);
s := PChar(str);
end;
function SetROMP(irom: TIROM): EStatus; stdcall; export;
begin
Result := Remote.SetROMP(irom);
end;
function GetROMP( var irom: TIROM; var romstatus: Cardinal ): EStatus; stdcall; export;
begin
Result := Remote.GetROMP(irom, romstatus);
end;
exports
WhoAmI, SetROMP, GetROMP;
// initialisation routine called by system =====================================
procedure IniRpc(Reason: Integer); stdcall;
begin
case Reason of
DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstance);
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
DLL_PROCESS_DETACH:
;
end;
if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;
begin
DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@IniRpc)));
IniRpc(DLL_PROCESS_ATTACH);
end.
Wenn ich das compiliere, so kriege ich Fehler wegen des Typs TDLLProc. Ersetze ich diesen Typ durch Pointer, so kommt der Fehler, weil die Systemvariable DLLProc Delphi 7 nicht bekannt ist.
Frage 1: Wo sind TDLLProc und DLLProc definiert und wie komm ich da ran?
Die Variable CIF, definiert in der
Unit Link.pas müsste initialisiert werden. Das würde man wohl nach dem Aufruf von disableThreadLibraryCalls-Aufruf in IniRpc machen - aber
Frage 2:Wie das? Bei einer Application sieht das ja so aus:
Application.CreateForm(TCIF, CIF);
und in einer
DLL?
Mit Dank und Gruss bubuu