MFC로 DLL만들기 및 다이얼로그 파워빌더와 연동하기(1)
많은 분들이 External 펑션으로 dll에 있는 함수들을 이용하게 되는데요.
dll을 이용을 하시다보면 너무 많은 dll을 필요로 하게 되거나, 심지어는 파워빌더에서 이용할 수 없는 함수가 있는 경우도 생깁니다. 이럴 경우 api dll을 만드시거나 mfc dll을 생성하시게 되는데요. 만드는 방법이 많은 분들은 아시겠지만,
모르는 분들을 위해 한 번 정리해 보도록 하겠습니다. 추가해서 다이얼로그 박스도 띄워보도록 하겠습니다.
기준은 Visual Studio 2005로 하겠습니다.(물론 이거 보셔도 6.0으로 이해하실 수 있을 거에요.)
파일 새 프로젝트에서 MFC -> MFC DLL을 선택하고 이름은 PBDLL_TEST로 하였습니다.
(폴더 같은거는 알아서 정해주시면 되겠죠.)
확인을 클릭하시면 위와 같은 창이 뜨게 됩니다. 다음을 클릭!
<?xml:namespace prefix = o />
위와 같은 창이 뜨면 중요한 것은 빨간색 줄 친 부분입니다. 디폴트는 위에 공유 MFC 인데,
이렇게 하면 나중에 MFC가 돌아가는데 필요한 DLL을 배포해야 하니 DLL Size가 좀 크더라도
DLL만 배포하기 위해서 두번째 옵션을 선택해 주셔야 합니다.
필요로, 소켓 같은거 쓰시려면 추가 기능에서 체크 해주시면 됩니다.
생성되는 파일을 보면
PBDLL_TEST.h
해당 DLL의 기본 헤더파일이며, CPBDLL_TESTApp 클래스가 선언되어 있습니다.
PBDLL_TEST.cpp
기본 DLL 소스파일 입니다. CPBDLL_TESTApp 클래스가 포함되어 있습니다.
PBDLL_TEST.rc
프로그램에서 사용하는 모든 Microsoft Windows 리소스의 목록입니다.
여기에는 RES 하위 디렉터리에 저장된 아이콘, 비트맵 및 커서가 포함됩니다. 이 파일은
Microsoft Visual C++에서 직접 편집할 수 있습니다.
res\PBDLL_TEST.rc2
이 파일에는 Microsoft Visual C++ 이외의 다른 도구에서 편집한 리소스가 포함되어
있습니다. 리소스 편집기로 편집할 수 없는 모든 리소스는 이 파일에 넣어야 합니다.
PBDLL_TEST.def
이 파일에는 Microsoft Windows에서 실행되기 위해 제공해야 하는 DLL에 대한 정보가 포함
되어 있으며, DLL의 이름 및 설명과 같은 매개변수가 정의되어 있습니다. 또한 DLL에서 함수
도 내보냅니다.
간단하게 파워빌더에서 호출할 함수를 하나 만드는 법을 살펴보죠.
PBDLL_TEST.cpp에서 작성하게 되며 위치는 관련이 없습니다.
extern "C" BOOL PASCAL EXPORT로 시작을 하면 됩니다. 간단하게 메시지 박스를 하나 띄우도록
하겠습니다.
먼저 하실거는 옵션을 셋팅 해주셔야 됩니다.
메뉴 – 프로젝트 – 속성 – 일반에 보시면
문자집합이 유니코드로 되어 있는데 이걸 멀티바이트로 바꿔주셔야 합니다.
그리고 함수는 아래와 같이 작성하였습니다.
extern "C" BOOL PASCAL EXPORT TestMsgBox()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
MessageBox(0, "메세지박스테스트.","확인", MB_OK);
return 0;
}
함수 작성은 끝났습니다.
이제 외부함수로 내보낼 함수 이름을 PBDLL_TEST.def에 지정하셔야 합니다.
PBDLL_TEST.def 파일을 여시고,
위와 같이 TestMsgBox 를 한 줄 추가해 줍니다.
그리고 메뉴 – 빌드 – 솔루션 다시 빌드로 풀빌드를 해주시면 Visual Studio에서의 작업은
끝나게 됩니다.
그리고 처음에 지정했던 폴더에 가보시면 PBDLL_TEST.dll 이 생성이 되어 있습니다.
이 DLL을 파워빌더 작업할 폴더에 복사해주시면 됩니다.
이제 파워빌더로 돌아가 보죠.
해당 윈도우는 아래와 같이 디자인 하였습니다.
윈도우의 익스터널 펑션 부분에
DLL의 함수를 선언해 줍니다.
FUNCTION Boolean TestMsgBox() LIBRARY "PBDLL_TEST.dll" ALIAS FOR "TestMsgBox;ansi"
그리고 DLL 호출 버튼의 Clicked Event에서 함수를 호출합니다.
cb_1 의 Clicked() 이벤트
TestMsgBox()
실행 해 본 결과는 아래와 같습니다.
어떻습니까? 간단하죠? MFC로 DLL을 생성해서 함수만 하나 추가 해줬을 뿐입니다.
다음 번에는 이 DLL에서 다이얼로그까지 띄우는 것을 해보도록 하겠습니다.