开源时代C语言C++

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

(注:将extern "C"放在最前面)

mydll.h mydll.cpp

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,即便你花钱看我的文章,也会觉得心满意足


上一篇 下一篇

猜你喜欢

热点阅读