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 |