一个简单的DLL生成和测试

Posted 自由真实个性

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的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;
}

 

运行结果:

先弹出DLL_PROCESS_ATTACH消息框,然后输出5,最后弹出DLL_PROCESS_DETACH消息框;

以上是关于一个简单的DLL生成和测试的主要内容,如果未能解决你的问题,请参考以下文章

c++ 如何生成dll文件?

具有我可以包装的功能的简单 Windows dll

简单实现程序DLL劫持

weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能

把C#程序(含多个Dll)合并成一个Exe的超简单方法

加载链接到使用空 DllMain 的 DLL 时,应用程序无法启动 (0xC0000142)