1. MFC DLL기반으로 새 프로젝트를 생성한다.(DllApp)

DLL형식=MFC 확장 DLL

 

2.DllMain함수 확인

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

 

// dll이 올라갈 때

if (dwReason == DLL_PROCESS_ATTACH) 사용

 

// dll이 내려갈 때

else if (dwReason == DLL_PROCESS_DETACH) 사용

 

3. 함수만들기

BOOL WINAPI GetModulePath(CString& strPath)

{

}

 



__declspec(dllexport)
BOOL WINAPI GetModulePath(CString& strPath) // 전체 파일의 물리적 경로를 읽어오는 함수
{
 TCHAR szBuffer[MAX_PATH];
 ::ZeroMemory(szBuffer, sizeof(szBuffer));
 ::GetModuleFileName(NULL, szBuffer, MAX_PATH);

 for (int i=lstrlen(szBuffer)-1; 1>=0; --i)
 {
  if (szBuffer[i] == '\\')
  {
   int j = lstrlen(szBuffer)-1;
   for (;j>=i;--i)
   {
    szBuffer[j]=NULL;
   }
   if (szBuffer[j] == ':')
   {
    szBuffer[j+1] = '\\';
   }
   strPath = szBuffer;
   return TRUE;
  }
 }
 return FALSE;
}

 

4. 프로젝트 새로 만들기. MFC응용프로그램. 솔루션에 추가. 대화상자 기반(TestApp)

 

5. 버튼추가하여 캡션 수정(Button1->Call GetModule())

:버튼을 클릭하면 GetModule()함수를 호출하도록.

 

6. stdafx.h파일에 선언

__declspec(dllimport!) BOOL WINAPI GetModulePath(CString& strPath);
#pragma comment(lib, "DllApp")

 

7. 버튼의 이벤트 핸들러 추가

void CTestAppDlg::OnBnClickedButton1()
{
 CString strPath = _T("");
 ::GetModulePath(strPath);

}

 

8."TestApp"를 시작프로젝트로 설정해주고, 빌드시 Appdll.lib파일을 찾을 수 없다는 오류가 나면,

DllApp프로젝트의 디버그 폴더에서 해당파일을 찾아 TestApp프로젝트 폴더로 복사하여 다시 빌드한다.

 

 

암시적링크/명시적링크


'PROGRAMMING > MFC(C++)' 카테고리의 다른 글

소켓 프로그래밍 주요함수  (0) 2011.04.27
[0426수업] Windows Service Process  (0) 2011.04.26
[0425수업] ClipBoard  (0) 2011.04.25
[0422수업] IPC통신  (0) 2011.04.22
[0422수업] 중복실행 방지  (0) 2011.04.22
Posted by 마마필로 :