是否可以在主应用程序中使用DLL中创建的CPropertyPage?

时间:2018-02-18 15:19:13

标签: c++ winapi mfc

我有一个托管CPropertySheet的基于对话框的MFC应用程序。

我的想法是扫描一些文件夹中的DLL,动态加载它们(使用LoadLibrary()),获取指向一个像CPropertyPage工厂一样工作的函数的指针,使用该函数创建每个DLL CPropertyPage个实例,并将它们插入CPropertySheet

换句话说,扫描文件夹中的插件,获取per-plugin属性页并将它们插入主应用程序的CPropertySheet,这样每个插件都会拥有它自己的选项GUI。

插件以常规MFC dll(不是扩展dll)的形式实现。我知道AFX_MANAGE_STATE(AfxGetStaticModuleState())将被雇用。

正在创建的每个CPropertyPage必须从抽象接口(例如,IPluginOptionsPropPage)派生,因此可以将工厂函数返回的指针强制转换为IPluginOptionsPropPage

这项任务应该是常规任务,但是,我找不到任何合理的例子。

1 个答案:

答案 0 :(得分:0)

是的,可以做到。您可以尝试这些步骤

  1. 使用:: LoadLibrary加载属性页库。返回句柄是资源的句柄。

    m_hResInstance = ::LoadLibrary(strFile);
    
  2. 在创建属性页面的实例之前,请将资源句柄的实例设置为库的句柄。

    m_hCurrent = AfxGetResourceHandle();
    
    AfxSetResourceHandle(hResInstance);
    
    //Create your property sheet here.
    
  3. 然后将资源句柄重置为当前进程资源。

    //Reset the previous
    
    AfxSetResourceHandle(m_hCurrent);
    
  4. 这将使您能够加载属性页的资源,其他像头和库或函数指针可以按预期使用。