我有一个托管CPropertySheet
的基于对话框的MFC应用程序。
我的想法是扫描一些文件夹中的DLL,动态加载它们(使用LoadLibrary()
),获取指向一个像CPropertyPage
工厂一样工作的函数的指针,使用该函数创建每个DLL CPropertyPage
个实例,并将它们插入CPropertySheet
。
换句话说,扫描文件夹中的插件,获取per-plugin属性页并将它们插入主应用程序的CPropertySheet
,这样每个插件都会拥有它自己的选项GUI。
插件以常规MFC dll(不是扩展dll)的形式实现。我知道AFX_MANAGE_STATE(AfxGetStaticModuleState())
将被雇用。
正在创建的每个CPropertyPage
必须从抽象接口(例如,IPluginOptionsPropPage
)派生,因此可以将工厂函数返回的指针强制转换为IPluginOptionsPropPage
。
这项任务应该是常规任务,但是,我找不到任何合理的例子。
答案 0 :(得分:0)
是的,可以做到。您可以尝试这些步骤
使用:: LoadLibrary加载属性页库。返回句柄是资源的句柄。
m_hResInstance = ::LoadLibrary(strFile);
在创建属性页面的实例之前,请将资源句柄的实例设置为库的句柄。
m_hCurrent = AfxGetResourceHandle();
AfxSetResourceHandle(hResInstance);
//Create your property sheet here.
然后将资源句柄重置为当前进程资源。
//Reset the previous
AfxSetResourceHandle(m_hCurrent);
这将使您能够加载属性页的资源,其他像头和库或函数指针可以按预期使用。