动态库如何动态加载

 时间:2026-02-16 05:01:55

1、LoadLibrary函数的声明如下,它只有一个参数,指明要加载的动态库。

动态库如何动态加载

2、GetProcAddress函数的声明如下,它有两个参数,一个是LoadLibrary函数返回的模块句柄,一个是要获取的函数名称。

动态库如何动态加载

1、这里以user32.dll中的MessageBox函数为例,开发环境使用vs2017。首先点击“文件”——“新建”——“项目”建立一个win32控制台程序。

动态库如何动态加载

动态库如何动态加载

2、正常的使用MessageBox代码如下,直接调用即可。

//vs2017中的代码

#include <tchar.h>

#include <windows.h>

int main(){

    MessageBox(0, _T("hello world!"), _T("MessageBox"), MB_OK);

    return 0;

}

动态库如何动态加载

3、如果使用动态加载,则需要首先用LoadLibrary函数加载user32.dll。

动态库如何动态加载

4、然后定义一个函数指针类型,用定义的函数指针类型定义函数指针。用于保存GetProcAddress()获取的MessageBox函数地址。

动态库如何动态加载

5、然后通过GetProcAddress()获取其函数地址。

动态库如何动态加载

6、最后通过函数指针调用MessageBox()函数即可。

动态库如何动态加载

7、所有代码及运行效果如下://添加上Api函数调用声明文件

#include <tchar.h>

#include <windows.h>

int main(){

    //加载user32.dll

    // 因为MessageBox()在user32.dll中导出

    HMODULE hdll = LoadLibrary(_T("user32.dll"));

    //如果加载成功则获取MessageBox函数的地址。

    if (hdll) {

            //首先定义一个用于指向MessageBox函数的函数指针类型

        typedef int(__stdcall *pfunc)(HWND, LPCWSTR, LPCWSTR, UINT);

        //用GetProcAddress()获取其地址

        pfunc  pmsgbox =  (pfunc)GetProcAddress(hdll, "MessageBoxW");

                //通过函数指针调用MessageBox

        pmsgbox(0, _T("hello world!"), _T("MessageBox"), MB_OK);

    }

    return 0;

}

动态库如何动态加载

  • Excel 公式求和时如何不计算隐藏单元格的数值
  • excel怎样将错误的数据圈起来?
  • PPT如何制作透视表格
  • Excel如何调用函数
  • 如何在物料收发明细表中显示收入发出数量小计
  • 热门搜索
    腾讯视频怎么下载 迈锐宝怎么样 被鱼刺卡了怎么办 怎么把电脑格式化 得了湿疹怎么办 页脚怎么设置 眼睛疲劳怎么缓解 pdf文件怎么打印 qq怎么注册微信账号 贴膜怎么贴