文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
15.7 加载动态链接库
如果你想要使用位于动态链接库中的函数,你需要使用 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论