2009-04-09 16 views
0

Mein Programm ist in C# NET 2.0 geschrieben, es verwendet externe Funktionen von einer DLL geschrieben in C++ mit Microsoft Visual Studio 2008 SP1. Wenn ich die DLL aus dem Verzeichnis entfernen, das das Programm platziert, stürzt das Programm in dem Moment ab, in dem es die DLL verwenden sollte. Das ist normal.C# Absturz beim Laden von C++ DLL

Aber die Benutzer, die mein Programm verwenden am gleichen Ort die gleichen Fehler, ohne die dll.They bewegt alle haben C++ Redistributable 2008 von >here<

Kommt es vor, weil ich das Programm in .NET 2.0 stattdessen gemacht von NET 3.5 oder es passiert, weil das Redistributable eine ältere Version sein sollte?

Edit: Hinweis für mich, das Programm läuft gut.

>>new thread<<

+0

Was ist die eigentliche Fehlermeldung für die Benutzer, wo es nicht funktioniert? –

Antwort

1

Die DLL wahrscheinlich die falsche Laufzeit. Stellen Sie sicher, dass Sie die richtige verteilen. Diese funktionieren immer auf Ihrer Entwicklungsumgebung, da die Laufzeiten im Pfad sind. Zum Testen der Software verwende ich eine virtuelle Windows XP-Maschine. Ich richte die virtuelle Maschine als eine komplett neue Installation ein, installiere die Komponenten, die ich kenne (.NET Framework, etc.) und führe dann mein Installationsprogramm aus. Sie werden dabei auf eine überraschende Anzahl von Setup-Problemen stoßen.

+0

Ich akzeptiere nur Ihre Antwort, weil Sie VM Box erwähnt haben. Ich benutzte das. Bitte überprüfen Sie meine neue Frage für weitere Informationen. –

0

Die C++ Redistributable, die Sie sieht verknüpft, wie es aus der ursprünglichen Version von Visual Studio 2008 ist sehen, ich könnte Wenn das ändert sich mit SP1, dass der Absturz verursacht. Vielleicht gibt es eine aktualisierte Version des Redistributable, die Ihre Benutzer installieren müssen?

0

Es gibt sehr wenig Informationen in Ihrer Frage über den tatsächlichen Absturz, der viele von vielen Dingen bedeuten könnte. Nach meiner Erfahrung mit dem Mischen von .NET und nativem C++ können viele Probleme nebeneinander auftreten (SxS), insbesondere wenn die DLL und die .NET-Anwendung mit verschiedenen Versionen des Compilers erstellt wurden.

Sie müssen dieses Problem möglicherweise auf einem lokalen Computer reproduzieren, um es zu debuggen.

0

Dependency Walker kann hervorragend sein, um diese Art von Problemen aufzuspüren. Sie können eine DLL in sie laden und es wird Ihnen sagen, wenn eine ihrer Abhängigkeiten nicht verfügbar sind. Manchmal sind fehlende DLLs nicht unbedingt ein Problem (wenn Sie nicht diesen Codepfad hinunter gehen), aber es ist so viel besser als Raten.

0

Kein Unterschied in diesem Zusammenhang der Verwendung von .NET 2.0 oder 3.5.
Blick in Verfahren, in dem Sie verknüpfen und Export-Funktionen von C++ (wenn es nicht verwaltet) Wenn externe Funktionen auf verwalteten C++ geschrieben hatte, schauen Sie in die Unterzeichnung und die Version von