![]() |
Einbinden einer DLL-Funktion klappt nicht
Hi!
Ich bin schon wieder zu doof um eine DLL-Funktion korrekt einzubinden. Habe schon einen Haufen von Funktionen gemappt, die alle funktionieren. An dieser scheitere ich:
Code:
[C++]
void IS3CALL _IS3SetCallback( ISCALLBACKPTR pCallback, UINT32 uUserData);
Code:
Aha, also mache ich:
The callback function must be a function of this type :
BOOL MyCallbackFunction(const UINT32 uCurRow, const UINT32 uTotalRows, const UINT32 uUserData) { if (time to quit) { return FALSE; } return TRUE; } Set it with: IS3SetCallback(MyCallbackFunction, uUserData);
Delphi-Quellcode:
In meiner Klasse dann:
interface
//... TIS3Callback = function(const uCurRow: UINT; const uTotalRows: UINT; const uUserData: UINT): BOOL of object; procedure IS3SetCallback(CallBack: TIS3Callback; UserData: UINT); stdcall; //.. implementation //.. procedure IS3SetCallback; external IS3Dll name '_IS3SetCallback';
Delphi-Quellcode:
und später:
private
//.. function CallBackFunc(const uCurRow: UINT; const uTotalRows: UINT; const uUserData: UINT): BOOL;
Delphi-Quellcode:
Wenn anschließend die DLL anfängz zu arbeiten gibt es einen Fehler 'Priviligierte Anweisung'. Ohne das Setzen des Callbacks passiert das nicht. (Um andere Fehler auszuschließen)
IS3SetCallback(CallBackFunc, 0);
Kann mir jemand helfen? Danke! Grüße Sebastian |
Re: Einbinden einer DLL-Funktion klappt nicht
bei deiner Callbackfunktion fehlt noch die Aufrufkonvention (also vermutlich das stdcall)
|
Re: Einbinden einer DLL-Funktion klappt nicht
Und vermutlich darf die Callback-Methode nicht in einer Klasse sein, da sie ja dann einen Versteckten Parameter Self hat ... Zumal die Übergabe einer procedure of object als Parameter 8Byte statt 4 Bytes braucht ... Also die Call-Back Prozedur darf nicht of objekt sein
|
Re: Einbinden einer DLL-Funktion klappt nicht
Dank an euch beide! Nachdem ich beide Hinweise berücksichtigt habe, hat es geklappt. Und wieder etwas gelernt. :thumb:
|
Re: Einbinden einer DLL-Funktion klappt nicht
Eine Frage habe ich doch noch. Dieser Callback wird von mehreren Threads gleichzeitig benötigt. Die DLL ist thread-safe. Wenn ich nun aber den Callback auf einen globale Funktion setze habe ich das Problem, dass der Callback auch beim richtigen Thread landen soll.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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