1

你好最优秀的 Stackoverflowians

使用visual studio 2008 Team System,

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

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

   CString tempString ;
....
}

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

“无法执行。进程已终止刷新进程列表,然后再尝试另一个附加”

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

关于巴兹

4

1 回答 1

1

MFC 程序有一个 CWinApp 对象实例 theApp,它管理新建和删除。

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

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

两种可能:

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

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

于 2010-02-11T08:43:07.880 回答