2012-01-04 3 views
3

일부 메모리 할당을 수행하고 포인터를 반환하는 DLL을 사용하고 있습니다. 코드가 같은 것입니다 :null 포인터를 반환하는 DLL 내부 메모리 할당

ObjectClass *obj = FunctionFromDLL(); 

obj가 유효한 포인터하지만 obj->SubObject이 (0xcdcdcd) 내가 확인하고 FunctionFromDLL()가 제대로 SubObject 할당하는 나쁜 포인터,이 포인터는 함수가 반환 잘못된 값을 가져옵니다 방문객.

DLL이 메모리를 "공유"할 수있는 특별한 것이 있습니까?

+2

메모리를 공유하기 위해 DLL과 관련하여 특별한 작업을 수행 할 필요가 없습니다. DLL은 동일한 주소 공간에 있습니다. 너의 문제는 다른거야. DLL 경계를 넘어 C++ 객체를 전달하려고합니까? 양쪽 컴파일러가 같고'dllexport' /'dllimport'를 사용하지 않으면 작동하지 않습니다. 우리가 도울 수 있기 전에 우리에게 더 많이 말해야합니다. –

+0

내 보낸 DLL 함수가 __declspec (dllexport)을 수행 중이고 가져온 .h 파일에서 __declspec (dllimport)를 사용하고 있습니다. 두 프로젝트가 동일한 Visual Studio를 사용하여 컴파일됩니다. – Guillaume

+0

더하지 않습니다. 당신이 아직 우리에게 말하지 않은 뭔가 여야합니다. 초기화 된 메모리는 모듈 경계를 지날 때 초기화되지 않습니다. –

답변

0

초기화되지 않은 힙 메모리를 표시합니다.

나는 그것을 제거하고 지금은 잘 작동합니다.

모두에게 감사드립니다.

2

dll과 app 사이에 할당 된 메모리를 공유하는 특별한 방법이 없습니다. 더 이상 사용하지 않으면 dll에서 메모리를 삭제하십시오.

편집 : 0xCDCDCDCD : 나는 처리기 값으로 _USE_32BIT_TIME_T을 정의하기 때문에 런타임 라이브러리를 디버깅 마이크로 소프트의 C++에서 사용 그것은했다

+0

이 힙 메모리는 DLL 내부에 초기화되어 있으며 디버거를 사용하여 검사 한 다음 외부에있을 때 초기화되지 않습니다. – Guillaume