一個簡單的DLL生成和測試


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

 int main()

{

cout<<"come in main"<<endl;

DllTest();

}

運行結果:

先輸出come in main 然后彈出DLL_PROCESS_ATTACH消息框,然后輸出5,最后彈出DLL_PROCESS_DETACH消息框;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM