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@12
    

    lautet.
    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 Long
    

    Kann 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);
    

Anmelden zum Antworten