1. 程式人生 > >一個簡單的DLL生成和測試

一個簡單的DLL生成和測試

get clu read fun info 簡單 reason ron 動態加載

DLL文件內容:

SKLDll.h

#ifndef _SKLDLL_H_
#define _SKLDLL_H_

#ifndef DLL_API
#define DLL_API extern "C" __declspec(dllexport)
#else
#define DLL_API extern "C" __declspec(dllimport)
#endif

DLL_API int add(int a,int b);

#endif//_DLLMAIN_DLL_H_

SKLDll.cpp

#include "SKLDll.h"
#include<windows.h>

BOOL APIENTRY DllMain(
HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL,"DLL_PROCESS_ATTACH", "Information", MB_OK | MB_ICONINFORMATION);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, "DLL_PROCESS_DETACH", "Information", MB_OK | MB_ICONINFORMATION);
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}

int add(int a, int b)
{
return (a + b);
}

DLL顯示(動態加載)調用代碼:

#include<windows>

typedef int(*lpAddFun)(int, int);//宏定義函數指針類型 ,定義一個與add函數參數類型和返回類型相同的指針函數
int DllTest(){
HINSTANCE hDll;//dll句柄
lpAddFun addFun;//函數指針
hDll = LoadLibrary("SKLDll.dll");//通過win32的api函數 動態加載dll模塊,並將dll模塊句柄賦給了hdll;
if (hDll != NULL){
addFun = (lpAddFun)GetProcAddress(hDll, "add");//通過api函數將dll模塊中函數add的地址賦給addfun
if (addFun != NULL){
int result = addFun(2, 3);
printf("%d\n", result);
}
FreeLibrary(hDll);
}
else
{
printf("%s", "DLL load failed");
}
return 0;
}

運行結果:

先彈出DLL_PROCESS_ATTACH消息框,然後輸出5,最後彈出DLL_PROCESS_DETACH消息框;

一個簡單的DLL生成和測試