내가이 프로토 타입을 갖는 기능을 포함하는 MFC DLL을 개발하여 DLL 내 보낸 된 함수에서 CStringArray 및 매개 변수를 해제 할 때 :힙 위반
//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
}
힙 위반 그냥 EXE/DLL의 경계를 넘어 CStringArray 같은 MFC 객체를 공유하기 위해 코드 블록
구성을 MFC 확장으로 변경하면 작업이 수행됩니다. 한 가지 더 변경해야 할 것은 함수의 선언을 다음과 같이 변경해야한다는 것입니다. – Dan
구성을 MFC 확장으로 변경하면 작업이 수행됩니다. 필자가 변경해야했던 한 가지 점은 내 보낸 함수의 선언을 long __declspec (dllexport)에서 : extern "C"__declspec (dllexport)로 길게 실행 가능 부분에서 링크 오류를 해결하는 것입니다. 또한 AFX_MANAGE_STATE (AfxGetStaticModuleState())가 dll 코드에서 제거되었습니다. – Dan