DLL的动态(手工)加载
2017-10-02 本文已影响12人
NiceBlueChai
手工加载
使用LoadLibrary来加载dll
使用FreeLibrary来卸载dll
它提供了一种在运行时、手工加载dll的技术手段,增加了编程的灵活性。
手工加载的特点
1.在需要的时候才加载,用完了就卸载
2.为了能够找到dll的函数地址,需要将函数声明为C函数
3.只需要*.dll文件,不需要.h和.lib
对DLL的要求
(1) 要求待调用的函数按"C"方式编译(符号名即函数名)
(2) dll文件放在可被系统搜索到的路径
1. 制作my.dll
里面添加一个C的函数,将函数声明为一个C的函数
extern "C" MYDLL int Add(int a, int b);
mydll.h mydll.cpp(注:将extern "C"放在最前面)
2、动态加载
新建空项目,添加cpp文件
项目属性|配置属性|常规|字符集:使用多字节字符
将制作的dll文件部署好
#include <stdio.h>
//包含Windows的头文件
#include <windows.h>
int main() {
HINSTANCE handle = LoadLibrary("DLL_7.dll");
if (handle)
{
//定义要找的函数原型
typedef int(*DLL_FUNCATION_ADD) (int, int);
//找到目标函数的地址
DLL_FUNCATION_ADD dll_fuc = (DLL_FUNCATION_ADD)GetProcAddress(handle, "Add");
if (dll_fuc)
{
//调用该函数
int result = dll_fuc(371, 150);
printf("result:%d\n",result);
}
//卸载
FreeLibrary(handle);
}
getchar();
return 0;
}
❤️我的目标是:someday,即便你花钱看我的文章,也会觉得心满意足