美文网首页开源时代C语言C++
DLL的动态(手工)加载

DLL的动态(手工)加载

作者: NiceBlueChai | 来源:发表于2017-10-02 00:03 被阅读12次

    手工加载

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


    相关文章

      网友评论

        本文标题:DLL的动态(手工)加载

        本文链接:https://www.haomeiwen.com/subject/wjraextx.html