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_);
}
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? –
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
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 ... –