공부/API
DllMain에서의 호출 순서
잠수함토끼
2008. 9. 10. 22:33
DllMain.h
Dllmain.cpp
DllFunction.def
DllApp.cpp
#ifdef MYEXPORTDF #define MYEXPORT extern "C" __declspec(dllexport) #else #define MYEXPORT extern "C" __declspec(dllimport) #endif #undef UNICODE #include#include
Dllmain.cpp
#define MYEXPORTDF #include "DllMain.h" MYEXPORT int WINAPI wonJae() { printf("hi\n"); return 0; } BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpRes) { switch (fdwReason) { case DLL_PROCESS_ATTACH: printf("Dll Process Attach\n");break; case DLL_PROCESS_DETACH: printf("Dll Process Detach\n"); break; case DLL_THREAD_ATTACH: printf("Dll Thread Attach\n"); break; case DLL_THREAD_DETACH: printf("Dll Thread Detach\n"); break; default: break; } return TRUE; }
DllFunction.def
LIBRARY "DllMain" EXPORTS wonJae
DllApp.cpp
#include "DllMain.h" typedef int (*fpu)(); int main(void) { printf("LoadLibrary Start\n"); HMODULE hModule=LoadLibrary("DllMain.dll"); printf("LoadLibrary End\n"); if(INVALID_HANDLE_VALUE == hModule) { printf("LoadLibrary error\n"); return 0; } printf("GetProcAddress Start\n"); fpu fPU=(fpu)GetProcAddress(hModule,"wonJae"); if(NULL == fPU) { printf("GetProcAddress error\n"); return 0; } printf("GetProcAddress End\n"); fPU(); printf("FreeLibrary Start\n"); FreeLibrary(hModule); printf("FreeLibrary End\n"); return 0; }