본문 바로가기
IT/C++

MFC 에서 dll에 CStringArray를 인자 전달시 Heap Violations 에러 발생

by Spring Up!! 2016. 9. 23.
반응형
MFC Application 에서 dll 의 함수에 CStringArray& 를 이용하여 변수를 참조로 전달하고, 결과값을 CStringArray 로 받아오는 코딩을 하였다.
즉 dll 에서 CStringArray 에 입력할 값을 할당한  경우였다.
그런데 지역함수를 빠져나갈 때 Heap Violation 이 발생하여 검색을 하니 관련 정보를 찾을 수 있었다.
( http://stackoverflow.com/questions/7309277/heap-violations-when-releasing-a-cstringarray-parameter-from-a-dll-exported-fun)

이것을 해결하려면 즉 CStringArray 같은 MFC Object 를 exe/dll 간에 사용하려면 MFC Extension DLL 을 사용하여야 한다.

MFCx0.dll and all extension DLLs loaded into a client application's address space use the same memory allocator, resource loading, and other MFC global states as if they were in the same application. This is significant because the non-MFC DLL libraries and the regular DLLs do the exact opposite and have each DLL allocating out of its own memory pool.

MFC extension DLL 은 Client Application의 address 공간에 같은 memory allocator 를 사용한다고 한다.
그런데 non-MFC DLL 은 반대라고 하니, 이것이 heap allocation error 의 원인이였다. (Access violation executing location 0xFEEEFEEE )
반응형

댓글