我已经开发含有具有该原型的功能的MFC DLL:堆违反
//DLL code
long __declspec(dllexport) GetData(CString csIdentifier, CStringArray& arrOfData)
{
//based on the identifier I must add some strings inside the string array
arrOfData.Add("...");
arrOfData.Add("...");
/*.....................*/
return 1;
}
,我有被后的函数被调用(从可执行的问题)。 arrData的析构函数将被调用并尝试释放内存,但它不会成功,因为arrOfData的分配是在另一个堆(在dll中)完成的。尽管我使用相同的环境设置编译了两个应用程序(Exe和Dll),但我仍然遇到了调试和两种发行模式的问题。我该如何解决这个问题?
//Executable code
{
CStringArray arrData;
GetData("Identifier",arrData);
//data is accesible
}
堆冲突发生时只是现有的代码块
将配置更改为MFC Extension做了这项工作。 我不得不改变的另一件事是功能声明必须从以下内容更改: – Dan
将配置更改为MFC扩展完成了这项工作。还有一件事我不得不改变,就是将导出的函数声明为:long __declspec(dllexport)to:extern“C”__declspec(dllexport)long来解决可执行端的链接错误。此外,AFX_MANAGE_STATE(AfxGetStaticModuleState())已从dll代码中删除。 – Dan