메뉴 건너뛰기

프로그래밍


동적 dll 이 가진 Dialog 를 Child Window 로 띄우는 방법입니다.
웹을 뒤져도 속시원한 답이 없어 작성하여 올려 둡니다.^^


소스 파일은 이곳에 있습니다.

*.(추가 수정) -->
아래는 codeproject 에 등록한 위치입니다.
http://www.codeproject.com/KB/dialog/LoadChild_gunman.aspx


찾고 보니 관련 유사 정보도 있군요. >.<
http://www.codeproject.com/KB/wtl/SDIViewWTLDLL.aspx


//Load a child dialog from DLL !! //dll 을 로드하여 사용할 //Main Window 를 가지고 있는 소스 코드 // //dll 로 부터 가지고 올 API 목록 typedef void (*PFnCreateMyDialog)(HWND hWnd); typedef void (*PFnCloseMyDialog)(void); HMODULE hDLL = NULL; void CMainFrame::OnMydialogOn() { // TODO: Add your command handler code here if(hDLL == NULL) { CString dllPath = ""; CFileDialog dlg( TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST, _T("dll files|*.dll|"), AfxGetMainWnd()); if( dlg.DoModal() == IDOK) { //dll 경로를 얻어와서 dllPath = dlg.GetPathName(); ////////////////////////////////////////////////////////////////////////// // load library hDLL = LoadLibrary(dllPath); if( hDLL == NULL) { AfxMessageBox("LoadLibrary Error !!"); return; } PFnCreateMyDialog pFnCreate = (PFnCreateMyDialog)GetProcAddress(hDLL, "CreateMyDlg"); if( pFnCreate == NULL) { AfxMessageBox("Get API - Error !!"); return; } //내 Window 의 handle 을 넘긴다. (pFnCreate)(this->GetSafeHwnd()); } } else { if(hDLL) { PFnCloseMyDialog pFnClose = (PFnCloseMyDialog)GetProcAddress(hDLL, "CloseMyDlg"); (pFnClose)(); FreeLibrary(hDLL); hDLL = NULL; } } } : : : /* * 동적 dll 의 헤더파일 코드 * * Lee Gun-woo, * http://AiRPAGE.ORG * Load a child dialog from DLL !! * */ // TestDlgDll.h // #ifndef __MYDLG_H__ #define __MYDLG_H__ #ifdef MYDLG_API_EXPORTS #define MYDLG_API __declspec(dllexport) #else #define MYDLG_API __declspec(dllimport) #endif class CTestDlgDll { public: void CreateMyDialog(HWND hWnd); void CloseMyDialog(); protected: /** @brief constructor */ CTestDlgDll(); /** @brief destructor */ virtual ~CTestDlgDll(); }; ////////////////////////////////////////////////////////////////////////// extern "C" MYDLG_API void CreateMyDlg(HWND hWnd); extern "C" MYDLG_API void CloseMyDlg(void); #endif //__MYDLG_H__ : : : /* * 동적 dll 의 body 코드 * * Lee Gun-woo, * http://AiRPAGE.ORG * Load a child dialog from DLL !! * */ // TestDlgDll.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "TestDlgDll.h" #include "TestDlg.h" CTestDlg *m_pMyDlg; ////////////////////////////////////////////////////////////////////////// // you should put the following code into you new dll. ////////////////////////////////////////////////////////////////////////// extern "C" MYDLG_API void CreateMyDlg(HWND hWnd); extern "C" MYDLG_API void CloseMyDlg(void); CTestDlgDll* gpThisDLL; MYDLG_API void CreateMyDlg(HWND hWnd) { gpThisDLL->CreateMyDialog(hWnd); } MYDLG_API void CloseMyDlg() { gpThisDLL->CloseMyDialog(); } CTestDlgDll::CTestDlgDll() { gpThisDLL = this; m_pMyDlg = NULL; } CTestDlgDll::~CTestDlgDll() { CloseMyDialog(); } void CTestDlgDll::CreateMyDialog(HWND hWnd) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if(m_pMyDlg == NULL) { CWnd *pParent = CWnd::FromHandle(hWnd); m_pMyDlg = new CTestDlg(pParent); m_pMyDlg->Create(IDD_TESTDLG, pParent); m_pMyDlg->ShowWindow(SW_SHOW); } } void CTestDlgDll::CloseMyDialog() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if(m_pMyDlg != NULL) { m_pMyDlg->DestroyWindow(); delete m_pMyDlg; m_pMyDlg = NULL; } }



번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [48] 파이팅건맨 2016.02.20 108620
공지 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 15769
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 14700
125 [TIP] 자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 파이팅건맨 2013.05.04 649
124 위치추적 [1] 우람사랑 2013.04.06 1971
123 [TIP] MySQL - NaviCat 사용시 에러 확인방법 파이팅건맨 2010.02.23 1175
122 [TIP] 설치된 코덱 리스트 얻어오기 파이팅건맨 2010.02.18 921
121 [TIP] VFW 에서 영상 압축을 위한 코덱을 코드상에서 선택하여 실시간 저장하는 방법입니다. 파이팅건맨 2010.02.04 1099
120 [TIP] Visual Studio App Wizard 만들기 관련 파이팅건맨 2009.12.17 993
119 [TIP] C# 에서 Win32 DLL 을 사용하기 위한 방법 파이팅건맨 2009.07.16 1149
118 [TIP] WMI 이용, 사용가능한 모뎀 포트 알아내기 파이팅건맨 2009.07.05 911
117 [TIP] Excel Ole 를 사용시 Hidden 열 혹은 행인지 알아내는 방법 파이팅건맨 2009.05.17 705
116 [TIP] Win32 API를 사용하여 응용 프로그램 열거하기 파이팅건맨 2009.01.15 705
115 [TIP] 홈페이지 자동 클릭하기 소스 파이팅건맨 2009.10.25 1853
114 [TIP] (MSDN) VS2005 에서 BHO 만드는 방법 링크 파이팅건맨 2009.01.06 614
113 [TIP] Windows 에서 COM10 이상을 여는 방법 [2] 파이팅건맨 2008.05.26 977
112 [TIP] 인터넷으로 문자메시지 (SMS) 보내기 파이팅건맨 2008.03.23 3042
» [TIP] 동적 DLL이 가진 Dialog를 Child Window로 띄우기 파이팅건맨 2008.03.16 1011
110 [TIP] 치명적 오류 발생시 오류창 안뜨게 하기? 파이팅건맨 2008.02.25 776
109 [TIP] USB 장치를 열거하는 코드 파이팅건맨 2008.02.03 651
108 [TIP] Windows 에서 장치 연결/제거 관리 코드 파이팅건맨 2007.12.21 712
107 [TIP] Source Insight 용 ARM Assembler 파서 파이팅건맨 2007.12.18 794
106 [펌] precompiled header 설정 관련 파이팅건맨 2007.08.07 650
위로