У меня есть код, компилируемый под clr, и другой код, который не управляется в одном проекте.
Мой файл common.h содержит все необходимые мне заголовки библиотеки std. Он включен в manager.h (предварительное объявление для manager.cpp (без CLR)), который включен в main_window.h (WinForm), который включен в document_manager.cpp (CLR).
Во время выполнения я получаю все виды странного поведения, в одном случае моя форма не загружается. Приостановка программы для отладки несколько раз показала, что она зависла, перераспределяя память для std :: string, в malloc.c. Изменяя код, я могу получить исключение System :: InvalidMemory (я думаю) в ostream.
Как мне остановить CLR от управления библиотекой std?
Если кому-то понадобится источник моих файлов, просто спросите.
Edit:
В callstack у меня есть некоторый управляемый код, который запускается при загрузке моей формы. В обратном вызове инициализации окна у меня есть собственный переход, а затем мой класс менеджера. Позже я доберусь до
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;
и в callstack отображаются std :: basic_string :: assign, затем некоторые другие std :: functions и, наконец, функция malloc, в которую она постоянно вставляется.
Edit:
Исключение, которое выдается при записи в файл:
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)