返回介绍

15.7 加载动态链接库

发布于 2025-03-08 15:27:56 字数 1123 浏览 0 评论 0 收藏 0

如果你想要使用位于动态链接库中的函数,你需要使用 wxDynamicLibrary 类.使用方法是:在其构造函数或者 Load 函数中传递动态链接库的文件名,如果你不希望 wxWidgets 自动增加类似.dll(windows) 或者.so(linux) 这样的扩展名,还需要传递 wxDL_VERBATIM 参数.如果加载成功,就可以使用 GetSymbol 函数通过函数名使用其中的函数了.下面的例子演示了怎样加载和使用 windows 的标准控件动态链接库:

#include "wx/dynlib.h"
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_DATE_CLASSES;
// 加载 comctl32.dll
wxDynamicLibrary dllComCtl32(wxT("comctl32.dll"), wxDL_VERBATIM);
// 定义 ICCEx_t 类型
typedef BOOL (WINAPI *ICCEx_t)(INITCOMMONCONTROLSEX *);
// 获取 InitCommonControlsEx 符号表
ICCEx_t pfnInitCommonControlsEx =
    (ICCEx_t) dllComCtrl32.GetSymbol(wxT("InitCommonControlsEx"));
// 调用获取的函数.
if ( pfnInitCommonControlsEx )
{
    (*pfnInitCommonControlsEx)(&icex);
}

wxDYNLIB_FUNCTION 宏使得上面代码中的 GetSymbol 行更为简洁:

wxDYNLIB_FUNCTION( ICCEx_t, InitCommonControlsEx, dllComCtl32 );

wxDYNLIB_FUNCTION 使得你只需要使用一次返回值类型作为其第一个参数,它将创建一个对应的变量,变量名由函数名和 pfn 前缀组成。

如果动态链接库被成功加载,它将在对应的 wxDynamicLibrary 对象被释放的时候,在其析构函数中自动被卸载,如果你希望在 wxDynamicLibrary 被释放以后继续使用相应的函数,你应该调用首先调用 wxDynamicLibrary 的 Detach 函数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文