从DLL导出函数中释放CStringArray&参数时发生堆溢出

我已经开发了一个MFC函数,其中包含一个具有此原型的函数:

//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中)完成的。 尽pipe我使用相同的环境设置编译了两个应用程序(Exe和Dll),但在debugging模式和两种发行模式下,我仍然遇到这个问题。 我该如何解决这个问题?

 //Executable code { CStringArray arrData; GetData("Identifier",arrData); //data is accesible } 

在现有代码块之前发生堆违例

为了跨exe / dll边界共享CStringArray之类的MFC对象,你需要使DLL成为一个MFC扩展DLL。 请参阅: https : //msdn.microsoft.com/en-us/library/h5f7ck28(v=vs.140).aspx

从内存管理部分:

MFCx0.dll和加载到客户端应用程序的地址空间中的所有扩展DLL使用相同的内存分配器,资源加载和其他MFC全局状态,就好像它们在同一个应用程序中一样。 这非常重要,因为非MFC DLL库和常规DLL完全相反,每个DLL都从自己的内存池中分配出来。

也有可能您的DLL函数需要在顶部调用AFX_MANAGE_STATE(AfxGetStaticmoduleeState())来设置外部调用的环境。