企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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函数.