Problem beim Import einer DLL-Funktion
-
Hallo Forum,
ich habe leider das folgende Problem. Ich muss eine Funktion
aus einer C-Dll aufrufen. Leider habe ich keine *.def Datei sondern
nur die *.lib und die *.dll Dateien.Ich weiß das die Funktion folgendermaßen aufgebaut ist:
LoadMap(const char* filename, unsigned char* serial, int serialLen);Leider schaffe ich es nicht die Funktion in meinem C-Code zu zu deklarieren
das der Compiler sie in der *.lib Datei findet.Ich hatte es versucht mit:
extern "C" int _cdecl LoadMap(const char* filename, unsigned char* serial, int serialLen);Ich habe des weiteren eine *.bas Datei um diese Funktion von VB 6 aus
aufzurufen. Hierbei ist angegeben das der Symbolische Name in der DLL
(Alias)ik2110@12lautet.
In VB kann ich die Funktion auch erfogreich aufrufen. Dekalriert wurde sie dort
mit:Declare Function LoadMap Lib "akg2.dll" Alias ik2110 _ (ByVal filename, _ , ByVal serial, _ , ByVal serialLen As Long) As LongKann mir vielleicht jemand einen Tipp geben wie ich die Funktion in C
deklarieren muss?Viele Grüße
Daniel
-
Schau mal da:
http://msdn2.microsoft.com/en-us/library/ms686944(VS.85).aspx
vielleicht hilft dir das weiter
Gruß Matthias
-
Du muss die .Lib in die Linkeroptionen eintragen und das .h File glaub ich includieren. Dann sollte er die Funtionen der DLL finden
Die Linkeroptionen sollten unter Projekt -> Eigenschaften ->Linker -> Eingabe -> Zusätzliche Abhängigkeiten zu finden sein (jedenfalls unter VS2005)
-
Ich habe gerade mal mit einem Hex-Editor in der Lib nachgeschaut und musste
sehen, das die Funktion die ich benutzen muss dort nicht auftaucht!Ich habe jetzt mit LoadLibrary die DLL geladen und versuche gerade die Funktion
(mit Hilfe von GetProcAdress) aufzurufen. Leider erscheint im Moment immer
die folgende Fehlermeldung:Run-Time Check Failure #0 - The value of ESP was not properly saved
across a function call. ...Ich habe den Funktionszeiger so definiert:
typedef int (*_LoadMap)(const char*, unsigned char*, int); _LoadMap LoadMap; ... LoadMap = (_LoadMap) GetProcAdress("hMod", "ik2110");
-
Problem gelöst!
typedef int (__stdcall* _LoadMap)(const char*, unsigned char*, int);