2012-08-06 6 views
15

Zunächst einmal sollte ich wahrscheinlich sagen, dass ich wahrscheinlich auf einer Stufe 5 mit diesem Zeug bin ... Ich verwende ein C++ Add-In in einer WPF-Anwendung. Jedes Mal, wenn ich versuche, das Programm zu beenden, erhalte ich folgende Fehlermeldung:0xC0020001: Die String-Bindung ist ungültig. - Nur vorkommend in WPF

Unbehandelte Ausnahme bei 0x770d15de in Raptor.exe: 0xC0020001: Die Zeichenfolge ist ungültig.

Ich habe dieses blog entry verwendet, um zu versuchen und das Problem herauszufinden, aber ich habe kein Glück. Eine Sache, die mir aufgefallen ist, wenn ich das gleiche C++ - Addin in einer Console-Anwendung benutze, die viele der gleichen Methoden aufruft, die in der WPF-Anwendung verwendet werden, beendet die Konsole ohne ein Problem.

Ich habe auch den C++ - Code durchgelesen und kann nirgendwo eine einzige statische Variable finden. Es gibt jedoch statische Methoden.

Jede Hilfe wäre sehr willkommen!

EDIT: Ich habe eine Reihe von Debugging-Funktionen aktiviert, um zu sehen, wo dies bricht. Es wurde Brechen der sp_counted_impl.hpp Datei (Boost) am letzten Klammer der folgenden Optionen:

virtual void dispose() // nothrow 
    { 
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) 
     boost::sp_scalar_destructor_hook(px_, sizeof(X), this); 
#endif 
     boost::checked_delete(px_); 
    } 
+0

Ist der C++ Code vollständig nativen (zB über COM oder P/Invoke ausgesetzt), C++ mit verwalteten Erweiterungen (dh VS2003) oder C++/CLI (VS2005 und später)? Wie lädt der C# -Code das C++ Addin? Es hört sich an, als ob Sie den gesamten C++ - Quellcode haben und notwendige Änderungen vornehmen können (es handelt sich nicht um eine Drittanbieter-Komponente, die Sie verwenden); Ist das korrekt? –

+0

Richtig, aber der Code wird zu 99% von Dritten geschrieben. Ich habe nur irgendwie Tasten gedrückt ... Es ist in VS2008. Ich habe einige \ Clr-Sache erfüllt, es verbindet einen Haufen Code (weiß nicht, was das tut) und ich tat es als MultiThreaded DLL. Einmal kompiliert, exportiert es eine DLL, die ich dann als Referenz in meinem C# -Projekt hinzufüge. – keynesiancross

+0

OK, es hört sich an wie das gleiche Problem, dem ich begegnet bin (und darüber gebloggt habe); IIRC Ich konnte es nur reproduzieren, indem ich eine "statische" Variable in einer C++ - Methode verwende (nicht mit einem globalen). Wenn Sie also keine "statischen" Variablen gefunden haben, bin ich mir nicht sicher, was das verursacht. Möglicherweise müssen Sie das Debuggen von nicht verwaltetem Code aktivieren (Projekteigenschaften, Registerkarte Debuggen), aktivieren Sie die Option Break, wenn in Debug> Exceptions ausgelöst wird, und prüfen Sie, ob die Ausnahme in crtdll debuggt.c liefert irgendwelche Hinweise ... –

Antwort

17

Dieser mit bestimmtem DLLs auftritt, die mit nativen Bibliotheken nicht verknüpfen und so ihr DllMain nicht initialisiert einige benötigt natives Subsystem (wie CRT oder ATL). Klingt so, als ob Sie eine DLL im gemischten Modus haben. Eine Lösung wird empfohlen, den Einstiegspunkt aus dem verwalteten DLL zu entfernen: Entfernen Sie den Einspeisepunkt des Managed DLL

  1. Verbindung mit/NOENTRY. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten , und klicken Sie auf Eigenschaften. Klicken Sie in dem Dialogfeld Eigenschaftsseiten auf Linker, klicken Sie auf Befehlszeile, und fügen Sie dann diesen Schalter zu dem Feld Additional Options hinzu.
  2. Link msvcrt.lib. Klicken Sie im Dialogfeld Eigenschaftenseiten auf Linker, , klicken Sie auf Eingabe. Fügen Sie dann msvcrt.lib zur Eigenschaft Weitere Abhängigkeiten hinzu.
  3. Entfernen nochkclr.obj. Entfernen Sie auf der Seite Eingabe (dieselbe Seite wie im vorherigen Schritt) nochkclr.obj aus der Eigenschaft Zusätzliche Abhängigkeiten.
  4. Link in der CRT. Fügen Sie auf der Seite Eingabe (dieselbe Seite wie im vorherigen Schritt) __DllMainCRTStartup @ 12 zur Eigenschaft Symbolreferenzen erzwingen hinzu.

Weitere Einzelheiten finden Sie hier: https://support.microsoft.com/en-us/kb/814472

+0

Vielen Dank - ich versuche das jetzt. Ich habe bemerkt, dass nochkclr.obj schon nicht da war ... – keynesiancross

+0

Das hat funktioniert, vielen Dank! – keynesiancross

+0

Der Link zu Microsoft-Support funktioniert nicht :(. Bitte aktualisieren Sie es! – Doc

Verwandte Themen