AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Einbinden einer DLL-Funktion klappt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Einbinden einer DLL-Funktion klappt nicht

Ein Thema von sieppl · begonnen am 14. Mai 2006 · letzter Beitrag vom 14. Mai 2006
Antwort Antwort
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

Einbinden einer DLL-Funktion klappt nicht

  Alt 14. Mai 2006, 19:27
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:
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
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Einbinden einer DLL-Funktion klappt nicht

  Alt 14. Mai 2006, 19:31
bei deiner Callbackfunktion fehlt noch die Aufrufkonvention (also vermutlich das stdcall)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: Einbinden einer DLL-Funktion klappt nicht

  Alt 14. Mai 2006, 19:57
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
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#4

Re: Einbinden einer DLL-Funktion klappt nicht

  Alt 14. Mai 2006, 20:47
Dank an euch beide! Nachdem ich beide Hinweise berücksichtigt habe, hat es geklappt. Und wieder etwas gelernt.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#5

Re: Einbinden einer DLL-Funktion klappt nicht

  Alt 14. Mai 2006, 20:55
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.
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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