Probleme beim Ausführen einer Anwendung auf einem anderen Rechner (DLL)



  • Hallo,
    ich habe folgendes Problem. Ich habe eine MFC Anwendung erstellt, die unter anderem auf die serielle Schnittstelle zugreift. Nun habe ich das EXE File erzeugt.

    Wenn ich nun dieses File auf einem anderen Rechner ausführen möchte erhalte ich die Fehlermeldung, dass dll Files fehlen. Ich habe mir die fehlenden Files dann aus dem internet besorgt (da der Entwicklungsrechner nicht zur Hand war) und es kam wie es kommen musste: Versionskonflikt!!

    Wie kann ich beim erzeugen der EXE feststellen welche DLLs ich noch benötige und ggf. mitliefern muss?

    MfG
    Andreas



  • Schau in die FAQ.



  • Welches VS? 6/7/7.1/8?



  • Leider konnte ich in der FAQ noch nichts endecken. Villeicht bin ich auch nur zu blöd die richtigen schlagworte in die suche einzugeben 😞

    Ich arbeite mit Visual Studio 6.

    MfG
    Andreas



  • Hast du Release eingestellt?



  • qasdfgh schrieb:

    Hast du Release eingestellt?

    Danke! Nein hatte ich natürlich nicht bin ja Newbie. Wenn ich das tue läuft die Kompilierung weiterhin problemlos aber beim Linken wird er folgende Fehlermeldung aus.

    --------------------Konfiguration: u136 - Win32 Release--------------------
    Linker-Vorgang läuft...
    u136Dlg.obj : error LNK2005: "class CByteArray cba_navdata" (?cba_navdata@@3VCByteArray@@A) bereits in u136.obj definiert
    Release/u136.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
    Fehler beim Ausführen von link.exe.

    u136.exe - 2 Fehler, 0 Warnung(en)
    ---------------------------------------------------------------------------

    Irgendwie ist mir heute morgen noch nicht klar was ich da wieder getan habe...

    Wenn ich mein Projekt nach "cba_navdata" durchsuche finde ich 4 Stellen.

    Suchen nach "cba_navdata"...
    C:\Bluetooth\C++_sim\NavSim\u136Dlg.cpp(496): var = COleVariant(cba_navdata);
    C:\Bluetooth\C++_sim\NavSim\u136Dlg.cpp(706): cba_navdata.RemoveAll();
    C:\Bluetooth\C++_sim\NavSim\u136Dlg.cpp(708): cba_navdata.SetAtGrow(i, b_data0[i]);
    C:\Bluetooth\C++_sim\NavSim\u136Dlg.h(18):CByteArray cba_navdata; //Navigationsdaten
    Es wurde(n) 4 Übereinstimmung(en) gefunden.

    Vielleicht wird jemand auf die kürze Schlau daraus.

    Danke



  • Andreas123 schrieb:

    C:\Bluetooth\C++_sim\NavSim\u136Dlg.h(18):CByteArray cba_navdata; //Navigationsdaten

    Du definierst eine Variable in einer Headerdatei. Das ergibt Linkerfehler, wenn diese Headerdatei in mehr als einer Übersetzungseinheit landet, was bei dir offenbar der Fall ist, in u136Dlg.cpp und u136.cpp.

    In der Headerdatei darfst du diese Variable nur deklarieren (schreib extern davor). Die Definition muss in eine cpp-Datei. u136Dlg.cpp würde sich anbieten.



  • MFK schrieb:

    Du definierst eine Variable in einer Headerdatei. Das ergibt Linkerfehler, wenn diese Headerdatei in mehr als einer Übersetzungseinheit landet, was bei dir offenbar der Fall ist, in u136Dlg.cpp und u136.cpp......

    Die Variablendefinition ist einfach in der falschen Datei gelandet. 🙂

    Die mit der Release Konfiguration erzeugte .exe ist nun noch kleiner geworden als die .exe die im Debugverzeichnis liegt. Ich hab jetzt gerade keinen (fremd) Rechner zur Hand umd auzuprobieren ob es nun Funktioniert.

    THX @ALL
    Andreas


Anmelden zum Antworten