我有一个基于对话框的 MFC 应用程序,它托管 CPropertySheet
。
想法是扫描一些文件夹中的 DLL,动态加载它们中的每一个(使用 LoadLibrary()
),获取一个指向像 CPropertyPage
一样工作的函数的指针> 工厂,使用该函数创建每个 DLL CPropertyPage
实例并将它们插入到 CPropertySheet
。
换句话说,扫描文件夹中的插件,获取每个插件的属性页并将它们插入到主应用程序的 CPropertySheet
中,以便每个插件都有自己的选项 GUI。
插件以常规 MFC dll(而非扩展 dll)的形式实现。我知道要使用 AFX_MANAGE_STATE(AfxGetStaticModuleState())
。
创建的每个 CPropertyPage
都必须派生自抽象接口(interface)(例如,IPluginOptionsPropPage
),因此可以将工厂函数返回的指针转换为 IPluginOptionsPropPage
.
这个任务应该是常规任务,但是,我找不到任何可靠的例子。
最佳答案
是的,这是可以做到的。您可以尝试这些步骤
使用::LoadLibrary 加载属性页库。返回句柄是资源的句柄。
m_hResInstance = ::LoadLibrary(strFile);
在创建属性页的实例之前,将资源句柄的实例设置为库的句柄。
m_hCurrent = AfxGetResourceHandle(); AfxSetResourceHandle(hResInstance); //Create your property sheet here.
然后将资源句柄重置为当前进程资源。
//Reset the previous AfxSetResourceHandle(m_hCurrent);
这将使您能够加载属性页的资源,其他如标题和库或函数指针可以按预期使用。
关于c++ - 是否可以在主应用程序中使用在 DLL 中创建的 CPropertyPage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853228/