Auslieferung einer CLI C++ Dll
-
Hi!
Ich hab folgendes Problem:
Ich hab .NET Programm, welches eine C++ .NET DLl benötigt. Wenn ich diese Programm nun auf einem rechner ausliefern will, welcher keine entwicklungs umgebung installiert hat. Dann wird diese "C++ .NET" DLL nicht gefunden.
Gehören zu diese C++ noch andere Abhängigkeiten wie die C++ Runtime?
Ich bin um jeden Rat dankbar.
Gruß Stu!
-
Noch als zusatzinfo, beim Laden wird eine Exception geschmissen, in der gesagt wird, das die Anwendungskonfiguration falsch ist.
-
Dann musst zusätzlich zur C++ Runtime auch noch das .NET Framework installierst sein.
-
Hast Du die C++ Runtime installiert?
-
C++ Runtime (für VS2005)
http://www.microsoft.com/downloads/details.aspx?FamilyID=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en.NET Framework 2.0
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en
-
die C++ Runtime ist jetzt installiert. Es funktioniert aber immer noch nicht. Muss es vieleicht ein Realease Build sein?
-
Ja, das muss es.
(Denn die C++ Runtime in der Redist. Fassung gibts nur als Release Build)
-
Zusätzlich ist noch zu beachten, dass es von der C++ Runtime 2005 noch eine mit SP1 gibt:
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=enFür VS2008 müsstest Du die entsprechende C++ Runtime installieren.
Was benutzt Du denn für ein VS?
-
das VS2005 mit SP1...habe es installiert, geht leider immer noch nicht. Er kann das .NET Assamlbie einfach nicht laden...
-
Zusätzlich musst du das .NET Frameowrk noch installieren.
Hast Du das?
-
ja klar, das ist alles drauf, .NET 2.0 und die C Runtime Library Sp1.
Ich hab dann einfach den Release Ordner auf den Anwendungsrechner kopiert.
Das programm, welches meine DLL aufruft , ist auch ein .NET programm. Das startet ganz normaler... bis das programm die C++ .NET Dll laden soll.
-
Wie rufst Du die DLL auf?
Passiert das bei deinem Entwicklungsrechner nicht (auch nicht mit Release)?
-
In meinem .NET programm gehe ich auch : "Verweis hinzufügen". Also die DLL als Assembly einbinden.
Nein das passiert auf meinem Entwicklungsrechner nicht. Auf dem Zielrechner sind auch definitive alle DLL´s drauf.
-
Probier mal mit dem Dependecy Walker herauszufinden ob wirklich alle DLL's vorhanden sind:
http://www.dependencywalker.com/Edit: Habs gerade gesehen... habe schlecht gelesen
Was benutzt Du für eine IDE?
Was für Versionen benutzt Du (vielleicht hast Du ja gegen das .NET Framework 3.5 kompiliert)...
-
ja ich benutzer VS2005
Ich habe alle DLL die mir der Depency Walker gemeldet hat zusätzlich noch kopiert.
Komisch ist, das trotz meine Release konfiguration immer noch die "D" - also DEBUG Dlls benötigt werden (Also z.b. MSVCM80D, MSVCR80D etc,..).Jetzt gibt mit der Depency Walker folgenden Fehler:
Error The Side-by-Side configuration information for cchromstar7CHRFILEIOLIB.DLL contains errors. Diese Anwendung konnte nicht gestartet werden, weil die Anwenungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren (14001).
Warning At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
-
Eine Release-Version darf keine Debug-DLLs anziehen...
Auch musst Du nach dem problem mit der komischen DLL schauen... wurde diese auch mit VS2005 erstellt? Oder mit VS2008? Dann musst Du womöglich noch das vcredist_x86 von VS2008 installieren!
-
Das ist alles ganz großer Mist.
Ich habe einen Ordner, da sind meine Realease datein drin.
Den Kopiere ich auf einen "Nakten" rechner. Dann installiere ist das .NET Framework. Dann installiere ich die vcr_rest aus MEINEM VC2005 ordner... also die selben, mit dem das ding compiliert wurde.
Und dann bekomme ich nen Side by Side error. Das ist echt zum Kotzen.
Ist das denn richtig das der DepencyWalker mir die MSVCR80D DLL als abhängigkeit anzeigt, oder ist das wohl möglich nen Fehler?
Wenn nicht, warum benötigt mein Release compilat eine "D" DLL. Wo kann ich das überprüfen im VS2005?
-
Ist das denn richtig das der DepencyWalker mir die MSVCR80D DLL als abhängigkeit anzeigt, oder ist das wohl möglich nen Fehler?
Es ist ein Fehler, dass bei deiner Release Version die Abhängigkeit auf die Debug Version der C Runtime besteht. Der Fehler musst Du bei deinen Kompiler / Linker Settings im Projekt finden.
Simon
-
das hab ich mir auch alles gedacht. Und hab jede Seite im Linker / Compiler durchsuchst. Und überall wo etwas mit debug steht, ist Debug deaktiviert. Ich habe an den Projekt settings auch nichts vorgesnommen, also die sollte auch alles noch Standard sein.
-
Du linkst doch dll's dazu bzw. referenzierst .net assemblies..
Sind das alles release versionen? (wenn eine davon eine debug version ist, und die die runtime benötigt, dann wird schlussendlich auch diese als abhängigkeit erscheinen.)
-
Du linkst vermutlich gegen irgendeine LIB, welche mit Debug erstellt wurde!