![]() |
Definition DLLProc-Variable in Delphi7
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:
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.
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. 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:
Delphi-Quellcode:
und in einer DLL?
Application.CreateForm(TCIF, CIF);
Mit Dank und Gruss bubuu |
Re: Definition DLLProc-Variable in Delphi7
DLLProc ist eine globale Variable in der Unit System (die immer eingebunden ist). Die brauchst/darfst du nicht extra deklarieren
|
Re: Definition DLLProc-Variable in Delphi7
zu 2.: CIF := TCIF.Create(nil);
Bernhard |
Re: Definition DLLProc-Variable in Delphi7
Zu 1.
Zitat:
Delphi-Quellcode:
mit der Meldung:
begin
DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@IniRpc))); Zitat:
Zu 2. Für den Tip Zitat:
|
Re: Definition DLLProc-Variable in Delphi7
Integer(@DLLProc)
Sonst würde es ja heißen du willst DLLProc aufrufen und dessen Result nach Integer casten. :zwinker: |
Re: Definition DLLProc-Variable in Delphi7
Mein Kommentar zu himitsu, bzw. dem fehlenden @: Du hast natürlich völlig recht. Ich könnte mir die Haare raufen - soweit noch vorhanden :wink: , dass ich das nicht selbst gemerkt habe. Danke für den Tip.
Nun compiliert meine dll. Und damit geht's jetzt an den Gebrauch dieser Ware. Allen Ratgebern herzlichen Dank. bubuu |
AW: Definition DLLProc-Variable in Delphi7
Ich wärm das hier mal auf, weil gleiches Problem - gehabt.
Aber ein weiteres (auch lösbares) kommt hinzu: procedure IniRpc(Reason: Integer); stdcall; <- wenn ich hier mit dem stdcall kompiliere, geht das laden der DLL im Programm völlig in die Uhr mit zig Fehlermeldungen. Lasse ich das stdcall weg, ist alles gut. Kann das jemand erklären ? |
AW: Definition DLLProc-Variable in Delphi7
Moin,
wenn die Deklaration der Aufrufkonvention in der DLL und im Programm nicht übereinstimmen kommt es zu Fehlern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz