C DLL in C++ verwenden



  • Hallo,

    ich habe momentan die Aufgabe, Daten aus einem proprietären Datenformat auszulesen und zu konvertieren. Der Hersteller stellt eine DLL und ein Beispielprojekt in C zur Verfügung. Normalerweise arbeite ich mit C#, aber ich denke dass es schwierig wird, die ganzen Funktionen mit ihren Parametern nach .NET zu übersetzen. Deshalb habe ich mich heute durch C++ und die MFC gewühlt und einen Benutzerdialog erstellt.

    Das Beispiel-Projekt in C läuft auch (Konsolenanwendung) und ich habe es entsprechend angepasst um mir die Infos anzuzeigen, die ich benötige. Dann dachte ich, dass ich nur noch die Funktionen aus dem C-Beispiel in mein MFC-Projekt kopieren brauche und dann fertig bin. Leider nicht.

    Folgendes habe ich getan:

    1. Die DLL in das Debug-Verzeichnis des MFC-Projekts kopiert.
    2. Die Header-Datei aus dem C-Beispiel in das MFC-Projektverzeichnis kopiert und über das Kontextmenü dem Projekt hinzu gefügt.
    3. In der Dialog-Klasse #include "xxx.h" oben rein geschrieben. Wenn ich #include <xxx.h> wie in dem C-Beispiel geschrieben habe, konnte er die Datei nicht finden???
    4. Eine Funktion aus der DLL in einer Behandelungs-Routine eines Buttons aufgerufen, genau so wie es im C-Beispiel funktioniert.

    Jetzt lässt sich das Projekt nicht mehr übersetzen mit foldender Fehlermeldung:

    Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__sie_context_new" in Funktion ""public: void __thiscall CSoMatTesterDlg::OnBnClickedButton1(void)" ... usw.

    Da es mein erstes C++ Projekt ist, weiß ich natürlich nicht, ob ich richtig vor gegangen bin.

    Kann mir jemand helfen? Soll ich noch etwas von dem Quelltext/Header etc. posten?

    Vorab vielen dank.



  • sieht so aus als hättest du in den projekteistellungen vergessen die library also xxx.lib datei anzugeben oder zumindest per

    #pragma comment(lib, "XXX.lib")
    

    den der linker kann die Funktionen nicht finden.



  • Hallo CTecS,

    danke für den Hinweis. Nach etwas googlen, wie man das einstellt, klappt es jetzt.

    Folgendes musste ich bei Visual Studio 2010 tun:

    1.) *.lib und *.h in das Projektverzeichnis kopieren.
    2.) *.dll in das Debug-Verzeichnis kopieren.
    3.) Unter "Projekteigenschaften -> Konfigurationseigenschaften -> C/C++ -> Zusätzliche Includeverzeichnisse" den Projektpfad angegeben.
    4.) Unter "Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Allgemein -> Zusätzliche Bibliotheksverzeichnisse" den Projektpfad angegeben.
    5.) Unter "Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten" den Namen der *.lib eintragen.

    Gruß

    Hugo


  • Mod

    5. Benöigst Du nicht wen Du im Code #pragma comment(lib,"LibName") einsetzt.
    Das ist mir weitaus lieber als die Libraries einzeln im Projekt anzugeben.
    Da auch alle meine externen Libs in einem Verzeichnis liegen, kann man sich 4. durch eine Property Datei erleichtern, die man für mehrere Projekte verwendet.


Log in to reply