Je compile du code sous le code clr et d'autres codes non gérés dans un seul projet.CLR interférant avec C++ STD?
Mon fichier common.h contient tous les en-têtes de bibliothèque std dont j'ai besoin. Il est inclus par manager.h (déclaration forward pour manager.cpp (no CLR)), qui est inclus par main_window.h (WinForm) qui est inclus par document_manager.cpp (CLR).
Lors de l'exécution, j'obtiens toutes sortes de comportements bizarres, dans un cas, mon formulaire ne se chargerait pas. La suspension du programme de débogage à plusieurs reprises a montré qu'il était bloqué en réaffectant la mémoire pour une chaîne std :: dans malloc.c. En changeant le code, je peux recevoir une exception System :: InvalidMemory (je pense) dans ostream. Comment puis-je empêcher le CLR de gérer la bibliothèque std?
Si quelqu'un veut la source de l'un de mes fichiers, il suffit de demander.
Modifier: Dans la pile d'appel, j'ai un code managé qui s'exécute lorsque mon formulaire se charge. Dans le rappel de la fenêtre init, j'ai une transition native gérée, puis ma classe de gestionnaire. Plus tard, je peux
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;
et callstack montre std :: basic_string :: assigner, puis d'autres std :: fonctions, et enfin la fonction malloc, qui est perpétuellement coincé dans.
edit: L'exception qui est levée sur l'écriture du fichier:
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)
Pouvez-vous poster du code qui reproduit le problème? Certaines erreurs plus spécifiques peuvent également être utiles. Si vous n'êtes même pas sûr de savoir quelle exception a été lancée, ou d'où, il devient très difficile de déboguer. – jalf
L'information ci-dessus est-elle suffisante? J'ai de la difficulté à reproduire le problème simplement - mais je vais continuer. –
Pourquoi les downvotes? C'est une bonne question. +1 –