我已經開發含有具有該原型的功能的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