2012-04-08 34 views
0

Ich habe eine Ironpython-App, die Dlls verwendet. Einige der DLLs sind in C# geschrieben und eine in verwaltetem C++. Die App funktioniert auf meinem Host und auf jedem Host, der die Installation von Visual Studio (2010) beinhaltet.laden C++ DLL in Ironpython

Wenn ich versuchte, diese App auf Hosts ohne vs auszuführen, scheiterte es. Nach einigen Überprüfungen habe ich entdeckt, dass ironpython die C++ DLL nicht laden kann. Nach der Installation von vs - die App läuft gut.

Ich verengte es nach unten: Die DLL kann nach der Installation von hochgeladen werden: -Microsoft Anwendungsfehler berichten -VC 9.0 Runtime (x86) -VC 10.0 Runtime (x86) -Microsoft Visual Studio Makro-Tools

Ich habe versucht, Microsoft Visual C++ 2010 Redistributable Package http://www.microsoft.com/download/en/details.aspx?id=5555 zu installieren, und es hat nicht den Trick gemacht.

  1. Warum? Was genau passiert bei der Installation von vs, das tritt nicht auf, wenn ich die Komponente Microsoft Visual C++ 2010 Redistributable Package installiere?
  2. Wie kann ich Fehler überwachen, die beim Laden von dlls mit ipy auftreten?

Vielen Dank!

Antwort

1

Die DLL, die in verwaltetem C++ geschrieben wird, verwendet eine DLL für seine Standardbibliotheken. Sie können es in statische Bibliotheken ändern. Führen Sie die folgenden Schritte

  1. Öffnen Sie die Projekteigenschaften in Visual Studio (Rechtsklick auf das Projekt)
  2. Klicken Sie Weg, um Konfigurationseigenschaften> C++> Codegenerierung
  3. Auf der rechten Seite finden Runtime-Bibliothek und wählen Sie Multi-Threaded Debug (/MTd)
  4. Machen Sie dasselbe für das Release-Build, aber diesmal Multi-Threaded (/MT)
  5. Rebuild all
wählen

Wie für Ihre spezifischen Fragen:

1. Das Redistribuable-Installationsprogramm kopiert die DLL in den Systempfad. Visual Studio wird das Gleiche tun. Wenn es nicht funktioniert, stellen Sie sicher, dass Sie die 32- oder 64-Bit-Binärdateien haben (genauso wie Ihr Code, nicht die Plattform, die Sie ausführen). + Wenn Sie von einer Konsole aus starten, schließen Sie sie und starten Sie eine neue, um den aktualisierten Pfad zu erhalten.

2. Verwenden Sie Dependency Walker. Das Laden Ihrer DLL wird Ihnen zeigen, wonach sie sucht, es sollte reichen. Um die Laufzeitausführung zu überwachen, laden Sie IronPython. Wählen Sie im "Profil" -Menü "Profilerstellung starten" und geben Sie eine Befehlszeile ein, die Ihr Problem reproduziert.

+0

OK, gute Antwort, mein Projekt war Multi-Threaded DLL (MD) und nicht MT wie du gesagt hast, aber leider, da ich das Tag "/ clr: oldsyntax" verwende (und es verwenden muss, um dieses Stück zu kompilieren) von Code, da es C-Code einwickelt) Ich kann das Projekt im MT-Modus nicht kompilieren ... –

+0

Und was ist die Ausgabe von DependencyWalker, wenn Sie Ihre DLL darin laden? Sie können die Ausgabe auf der Maschine vergleichen, wo es funktioniert und auf der Maschine, wo es nicht – ixe013

+0

Ja, ich verglich es, und entdeckte, dass das Problem war, dass ich DEBUG Build anstelle von Release-Build verwendete.Deshalb hat nach der Installation vs es funktioniert. –