MFC Extension DLL로 만든 프로제트에서
static AFX_EXTENSION_MODULE NEAR extensionDLL = { NULL, NULL };
DLL Project 에 클래스를 만들어서 외부로 공유 할 수 있습니다.
class AFX_EXT_CLASS CextClass{}; 와 head에 같이 사용하면 CextClass를
외부 프로젝트에서 사용할 수 있습니다.
그런데 Dll을 Debug로 배포하면 dll을 참조하는 프로젝트가 Debug,Release 중 어떤 것이 선택되어도 문제가 되지 않는다.
그런데 dll을 Release로 배포하면 이름 참조하는 프로젝트가 Debug로
컴파일 되면 Exception이 발생한다.
문제는 AfxGetInstanceHandle()이 MULL을 리턴 하므로 발생한다.
문제를 해결하고자 인터넷에서 많이 찾아보고 삽질 했는데 결굴 해답을 찾지 못했다.
에러를 찾기 위해서 Debug로 실행해야 하는데!!!
결국 방법을 조금 바꾸기로 했습니다.
DLL을 배포할 때 Debug와 Release 둘 다 배포하기로 결정 했습니다.
Debug 배포
Dll프로젝트의 “xxx.def”를 열어서
LIBRARY "xxx_dbg"
DESCRIPTION 'xxx_dbg Windows Dynamic Link Library'
로 수정한다
그리고 배포할 DLL이름을 “xxx_dbg.dll” 변경하고 Debug로 컴파일 한다.
Release 배포
Dll프로젝트의 “xxx.def”를 열어서
LIBRARY "xxx"
DESCRIPTION 'xxx Windows Dynamic Link Library'
로 수정한다
그리고 배포할 DLL이름을 “xxx.dll” 변경하고 Release로 컴파일 한다.
프로젝트에서 사용
Debug 와 Release 상황에 따라 Library 참조를 다르게 하도록 변경하도록 구성했습니다
Dll을 참조하는 클래스의 헤더 파일에
#ifdef _DEBUG #pragma comment( lib, "xxx_dbg.lib" ) #else #pragma comment( lib, “xxx.lib" ) #endif #pragma include_alias( "extClass.h", extClass.h" ) #include "extClass.h"와 같이 선언해서 사용합니다.Test 해본 결과 잘 동작 합니다.
'A > dll' 카테고리의 다른 글
error LNK2005: _DllMain@12 already defined in xxxLib.obj (0) | 2017.01.02 |
---|