Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einbinden einer DLL-Funktion klappt nicht (https://www.delphipraxis.net/69392-einbinden-einer-dll-funktion-klappt-nicht.html)

sieppl 14. Mai 2006 19:27


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:
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);
Aha, also mache ich:
Delphi-Quellcode:
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';
In meiner Klasse dann:
Delphi-Quellcode:
private
//..
function CallBackFunc(const uCurRow: UINT; const uTotalRows: UINT; const uUserData: UINT): BOOL;
und später:
Delphi-Quellcode:
IS3SetCallback(CallBackFunc, 0);
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)

Kann mir jemand helfen? Danke!

Grüße

Sebastian

SirThornberry 14. Mai 2006 19:31

Re: Einbinden einer DLL-Funktion klappt nicht
 
bei deiner Callbackfunktion fehlt noch die Aufrufkonvention (also vermutlich das stdcall)

jim_raynor 14. Mai 2006 19:57

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

sieppl 14. Mai 2006 20:47

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:

sieppl 14. Mai 2006 20:55

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 16:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz