Ich habe einige Code-Compiling unter der Clr und anderen Code, der in einem einzigen Projekt nicht verwaltet wird.CLR mit C++ STD interferieren?
Meine common.h-Datei enthält alle Header der Stammbibliothek, die ich brauche. Es wird von manager.h (forward-Deklaration für manager.cpp (no CLR)) eingeschlossen, das von main_window.h (WinForm) enthalten ist, das von document_manager.cpp (CLR) enthalten ist.
Zur Laufzeit bekomme ich alle möglichen seltsamen Verhalten, in einem Fall würde meine Form nicht geladen werden. Das Programm mehrere Male zum Debuggen anzuhalten, zeigte, dass es daran festhielt, Speicher für eine std :: string in malloc.c neu zuzuweisen. Indem ich den Code ändere, kann ich eine Ausnahme von System :: InvalidMemory (ich denke) in ostream erhalten.
Wie kann ich verhindern, dass die CLR die Std-Bibliothek verwaltet?
Wenn jemand möchte die Quelle zu meinen Dateien, fragen Sie einfach.
Bearbeiten: Im Callstack habe ich einige verwalteten Code, der ausgeführt wird, wenn mein Formular lädt. Im Fenster Init-Callback habe ich einen Übergang von managed zu nativ und dann meine Manager-Klasse. Später, ich zu
std::string error_msg;
error_msg = "Storage Manager: SQLite Error ("; <-- Executing Currently
error_msg += sqlite3_errcode(this->db_p);
error_msg += ") - ";
error_msg += sqlite3_errmsg(this->db_p);
*(this->log) << error_msg.c_str() << std::endl;
und die Aufrufliste zeigt std :: basic_string :: zuweisen, dann einige andere std :: Funktionen und schließlich die malloc-Funktion, die es in ständig klemmt.
edit: Die Ausnahme, die auf das Schreiben von Dateien geworfen wird:
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at manager.file_open(manager* , basic_string<char\,std::char_traits<char>\,std::allocator<char> >*)
at DocumentManager.main_window.file_open_mainmenu_Click(Object sender, EventArgs e) in c:\development\document manager\document manager\main_window.h:line 456
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Können Sie einen Code posten, der das Problem reproduziert? Einige spezifischere Fehler könnten ebenfalls hilfreich sein. Wenn Sie nicht einmal sicher sind, welche Exception ausgelöst wurde oder von wo, wird es ziemlich schwer zu debuggen. – jalf
Sind die obigen Informationen gut genug? Ich habe Probleme, das Problem einfach zu reproduzieren - aber ich bleibe dran. –
Warum die Downvotes? Das ist eine gute Frage. +1 –