Microsoft dll verwenden



  • ich habe eine dll-Datei die ich verwenden möchte um mit einen Gerät zu kommunizieren. Calling convention ist laut Hersteller stdcall.

    Es gibt ein Anleitung mit einer Funktionsliste. Hier ein Beispiel einer Funktion:

    HANDLE WINAPI OpenDevice(__in LPCSTR szPort);

    Ich habe nun die dll in mein Projekt im BCB5 eingebunden und versucht die Funktion OpenDevice zu verwenden. Dann kam die Fehlermeldung, dass er die Methode nicht kennt. Dann hab ich mit implib eine lib-Datei erzeugt. Die Datei wird angelegt aber ich bekomme eine Warnung:

    "Warning c:\neu\Velleman.Kits.dll: no exports"
    

    Darauf hab ich versucht mit impdef eine def-Datei zu erzeugen um zu sehen welche Methoden in der dll stehen. Die Datei wird auch angelegt. Aber sie ist leer.

    Dann hab ich versucht die dll mit extern einzubinden: (das hat ich im Netz aufgeschnappt)

    extern "C" __declspec(dllimport) HANDLE WINAPI OpenDevice(LPCSTR szPort);
    

    Das einbinden funktioniert. Will ich aber die Funktion verwenden gibts folgenden Fehler:

    Unresolved external "OpenDevice" referenced from ......
    

    Wo liegt der Fehler bzw. wie kann ich die dll verwenden?



  • Wenn Du keinen Header und keine LIB hast, dann musst Du die DLL mit "LoadLibrary" dynamisch laden und mit "GetProcAdress" Dir die Einsprungsadressen für die Funktionen holen und an Deine "Funktionszeiger" binden.
    Dann kannst du die Funktionen der DLL aufrufen.



  • Hallo,

    eine andere Möglichkeit wäre auch mit dem Tool implib eine import library zu erstellen und diese in dein Projekt einbinden.

    mfg Martin



  • mgaeckler schrieb:

    Hallo,

    eine andere Möglichkeit wäre auch mit dem Tool implib eine import library zu erstellen und diese in dein Projekt einbinden.

    mfg Martin

    Das hat der TE schon versucht 😉



  • MichelRT schrieb:

    mgaeckler schrieb:

    Hallo,

    eine andere Möglichkeit wäre auch mit dem Tool implib eine import library zu erstellen und diese in dein Projekt einbinden.

    mfg Martin

    Das hat der TE schon versucht 😉

    linopi schrieb:

    Darauf hab ich versucht mit impdef eine def-Datei zu erzeugen um zu sehen welche Methoden in der dll stehen. Die Datei wird auch angelegt. Aber sie ist leer.

    Ich lese bei ihm die Verwendung von impdef ich schlage aber die Verwendung von implib vor. Das sind zwei unterschiedliche Werkzeuge.

    mfg Martin



  • implib hab ich auch versucht. Die Datei wird erzeugt allerdings steht nach Aufruf von implib "no exports" dahinter.



  • linopi schrieb:

    implib hab ich auch versucht. Die Datei wird erzeugt allerdings steht nach Aufruf von implib "no exports" dahinter.

    Oh, sorry, hab ich übersehen. 🙄 Wenn das alles nichts fruchtet, scheint die Datei wohl defekt zu sein.

    mfg Martin



  • Bist Du Dir überhaupt sicher die richtige DLL zu verwenden? So wie ich das sehe, ist das eine .NET DLL



  • Eine andere Möglichkeit wäre auch mit dem Tool implib eine import library zu erstellen und diese in dein Projekt einbinden.



  • Morle schrieb:

    Bist Du Dir überhaupt sicher die richtige DLL zu verwenden? So wie ich das sehe, ist das eine .NET DLL

    Wenn ich google trauen kann ja. Zudem ist es nur ein Wrapper um eine andere native DLL.

    @linopi: Scheinbar gibt es eine native "K8090D.DLL", sofern ich per google den richtigen Post gefunden habe.


Anmelden zum Antworten