잠토의 잠망경

DllMain에서의 호출 순서 본문

공부/API

DllMain에서의 호출 순서

잠수함토끼 2008. 9. 10. 22:33
DllMain.h 



#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;
}




사용자 삽입 이미지


Comments