Probleme beim Einbinden einer fremden DLL



  • Hallo zusammen,

    ich möchte in einem Programm eine IGES-Datei (http://de.wikipedia.org/wiki/IGES) einlesen. Damit ich mir aber keinen eigenen Parser schreiben muss, möchte ich eigentlich die Open Source Software OpenCASCADE (http://www.opencascade.org) verwenden. Allerdings bekomme ich irgendwie nichts zum Laufen. Hat von Euch schon mal jemand etwas mit OpenCASCADE gemacht bzw. kann mir da jemand weiterhelfen?

    In dem Paket, was man bei OpenCASCADE runterladen kann, sind verschiedene DLLs mit zugehörigen LIBs und HXXs und natürlich zu allem der Quellcode (ist ja Open Source). Nun gibt es speziell eine DLL für die IGES-Sachen (einlesen, schreiben, etc.). Ich arbeite mit VS2005. Habe also ein neues leeres Projekt erstellt, eine C++-Datei hinzugefügt, einen main-Rahmen eingefügt und nun stehe ich auf dem Schlauch.

    Es gibt in dem Paket auch eine PDF für IGES und da steht drin, dass ich zum Einlesen den IGESControl_Reader verwenden soll, also

    #include "IGESControl_Reader.hxx"
    

    .

    Wenn ich das Projekt nun compiliere bekomme ich die Fehlermeldung, dass die Datei nicht geöffnet werden kann. Also unter Projekt\Eigenschaften\Konfigurationseigenschaften\C/C++\Allgemein\Zusätzliche Includeverzeichnisse den Ordner hinzugefügt wo die hxx liegt.

    Beim erneuten Kompilieren bekomme ich nun die Fehlermeldung, dass bei den Kompileroptionen der Wert WNT fehlt. Also unter Projekt\Eigenschaften\Konfigurationseigenschaften\C/C++\Präprozessor\Präprozessordefinitionen WNT eingefügt.

    Wenn ich jetzt kompiliere, bekomme ich neun Fehler und 27 Warnungen. Die Fehler beziehen sich alle auf nicht aufgelöste externe Symbole, was immer das auch heißt. Hier mal die Fehler:
    1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Standard_Storable::Delete(void)" (?Delete@Standard_Storable@@UAEXXZ)" in Funktion ""public: virtual __thiscall Standard_Storable::~Standard_Storable(void)" (??1Standard_Storable@@UAE@XZ)".
    1>Test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall Standard_Storable::HashCode(int)const " (?HashCode@Standard_Storable@@UBEHH@Z)".
    1>Test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Standard_Storable::ShallowDump(class std::basic_ostream<char,struct std::char_traits<char> > &)const " (?ShallowDump@Standard_Storable@@UBEXAAV?basic_ostream@DU?basic\_ostream@DU?char_traits@D@std@@@std@@@Z)".
    1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: static void __cdecl Standard::Free(void * &)" (?Free@Standard@@SAXAAPAX@Z)" in Funktion ""public: static void __cdecl Standard_Storable::operator delete(void *)" (??3Standard_Storable@@SAXPAX@Z)".
    1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Handle_XSControl_WorkSession::~Handle_XSControl_WorkSession(void)" (??1Handle_XSControl_WorkSession@@QAE@XZ)" in Funktion ""public: virtual __thiscall XSControl_Reader::~XSControl_Reader(void)" (??1XSControl_Reader@@UAE@XZ)".
    1>Test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall XSControl_Reader::NbRootsForTransfer(void)" (?NbRootsForTransfer@XSControl_Reader@@UAEHXZ)".
    1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall TColStd_SequenceOfTransient::Clear(void)" (?Clear@TColStd_SequenceOfTransient@@QAEXXZ)" in Funktion ""public: __thiscall TColStd_SequenceOfTransient::~TColStd_SequenceOfTransient(void)" (??1TColStd_SequenceOfTransient@@QAE@XZ)".
    1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall TopTools_SequenceOfShape::Clear(void)" (?Clear@TopTools_SequenceOfShape@@QAEXXZ)" in Funktion ""public: __thiscall TopTools_SequenceOfShape::~TopTools_SequenceOfShape(void)" (??1TopTools_SequenceOfShape@@QAE@XZ)".

    Die Warnungen beziehen sich alle auf Konvertierungen:
    1>d:\programme\opencascade6.1.0\ros\inc\standard_address.hxx(47) : warning C4311: 'Typumwandlung': Zeigerverkürzung von 'const Standard_Address' zu 'long'
    1>d:\programme\opencascade6.1.0\ros\inc\standard.hxx(73) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\standard_storable.hxx(66) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\standard_transient_proto.hxx(34) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(39) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(44) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(49) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(63) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(73) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(85) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(137) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(142) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_standard_transient.hxx(162) : warning C4312: 'Typumwandlung': Konvertierung von 'unsigned int' in größeren Typ 'Standard_Transient *'
    1>d:\programme\opencascade6.1.0\ros\inc\handle_mmgt_tshared.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_ifselect_worksession.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_xscontrol_worksession.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\tcollection_basesequence.hxx(63) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_tcollection_seqnode.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_tcolstd_sequencenodeofsequenceoftransient.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\tcolstd_sequenceoftransient.hxx(61) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_toptools_sequencenodeofsequenceofshape.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\toptools_sequenceofshape.hxx(58) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_interface_interfacemodel.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_tcolstd_hsequenceoftransient.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\xscontrol_reader.hxx(115) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\handle_igesdata_igesmodel.hxx(50) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich
    1>d:\programme\opencascade6.1.0\ros\inc\igescontrol_reader.hxx(103) : warning C4267: 'Argument': Konvertierung von 'size_t' nach 'const Standard_Integer', Datenverlust möglich

    Na jedenfalls stehe ich wie schon gesagt auf dem Schlauch 😕 und hoffe, dass mir von Euch jemand weiterhelfen kann. Schönen Dank schon mal im Voraus.

    Gruß
    Patrick



  • Die Lib enthält die Informationen die der Linker benötigt um gegen die DLL zu linken. Die Lib musst du ihm angeben in den Projektoptionen.



  • Habe jetzt die Lib eingefügt unter Projekt\Eigenschaften\Konfigurationseigenschaften\Linker\Eingabe\Zusätzliche Abhängigkeit und den Pfad unter Projekt\Eigenschaften\Konfigurationseigenschaften\Linker\Allgemein\Zusätzliche Bibliotheksverzeichnisse. Aber die Fehler bleiben da.

    Gruß
    Patrick



  • Habe es geschafft :), musste noch einige weitere Libs in Projekt\Eigenschaften\Konfigurationseigenschaften\Linker\Eingabe\Zusätzliche Abhängigkeit einfügen.

    Habe mich manuell durchgehangelt 👎, dass heißt ich habe jedes Projekt geöffnet und nachgesehen ob z.B. XSControl_Reader dort drin ist und dadurch habe ich dann herausgefunden welche Libs ich brauche. Kann man das (in welcher Lib ein bestimmter Typ drinsteckt, z.B. XSControl_Reader ist in TKXSBase.lib) irgendwie einfacher herausfinden?

    Gruß
    Patrick



  • Sollte eigentlich in ner gescheiten Doku mit drin stehen 😉



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten