动态库如何动态加载

2025-12-12 16:24:05

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;

}

动态库如何动态加载

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢