从c#调用的非托管c ++ dll,在dll中使用CString时崩溃

时间:2010-02-11 05:43:32

标签: c# c++ dll dllimport cstring

Hello最优秀的Stackoverflowians

使用visual studio 2008 Team System,

我有一个c ++ dll(mfc静态链接的常规dll),它具有简单的功能

extern "C" __declspec(dllexport) int MyExportedFunction( )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

   CString tempString ;
....
}

来自c#应用程序的DLLImport到dll工作,我可以从我的c#代码调试器中进入这个函数 但是(是的,它来了!) 在函数“MyExportedFunction”中,你可以看到我实例化一个CString,并且这个CString实例化被整个应用程序崩溃了 并且调试器给了我

“无法退出。此流程已终止 在尝试另一次附加之前刷新进程列表“

有没有人对我可以做些什么来解决这个问题有任何建议?

问候 蜂音

1 个答案:

答案 0 :(得分:1)

MFC程序需要一个管理new和delete的CWinApp对象实例theApp。

MFC常规DLL定义了自己的theApp对象,而MFC扩展DLL使用另一个模块的“theApp”。

我认为您的崩溃与缺少/未初始化的“theApp”一致。如果是这种情况,内存分配将失败,CString将使用内存分配。

两个可能性:

  • 您从中调用MFC扩展DLL 。净。 (扩展DLL不 提供它自己的应用程序

  • 您调用常规MFC DLL,其中未正确初始化theApp对象。