TARGETNAME=dll
TARGETTYPE=DYNLINK
SOURCES=dll.cpp \
USE_MSVCRT = 1
TARGETLIBS=$(SDK_LIB_PATH)\gdi32.lib \
$(SDK_LIB_PATH)\user32.lib \
$(SDK_LIB_PATH)\kernel32.lib \
$(SDK_LIB_PATH)\Ntdll.lib\
sources檔案內容,注意類型為DYNLINK
!INCLUDE $(NTMAKEENV)\makefile.def
makefile內容
dll.cpp源檔案內容
#include "Windows.h"
int Add(int a, int b)
{
return a+b;
}
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
MessageBox(NULL, TEXT("Load Dll"), TEXT("Load Dll"), MB_OK);
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
MessageBox(NULL, TEXT("Unload Dll"), TEXT("Unload Dll"), MB_OK);
break;
}
return TRUE;
}
dll.def檔案內容
LIBRARY dll
EXPORTS Add @1
編譯方法:
將上面的檔案分別儲存為: sources、makefile、dll.cpp、dll.def然後開啟WDK編譯環境切換到存放檔案目錄下執行build -c就可以產生一個dll.dll檔案,裡面有一個匯出函數Add
說明:在引用動態庫的匯出函數時採用__stdcall呼叫慣例方式