我写了一个Dialog,想将它包起来给别人使用,如何做?我建立一个 MFC DLL 动态链接库。
首先在动态链接库中加入一个对话框,就这个对话框,我想将它export出去,如何做呢?(不是在一个函数里调用对话框,再将 结果返回!)
(使用者要能够使用如下代码:MyDllDlg dlg;dlg.DoModal();......)

解决方案 »

  1.   

    把整个类输出去就行了,到goole或搜一下动态库里输出类,多得很
      

  2.   

    当你在 DLL 中使用资源时,有些小细节需要注意。首先,在 DLL 运行时,必须保存 DLL 的实例,可以通过 AfxInitExtensionModule。static AFX_EXTENSION_MODULE extensionDLL;extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
    {
       if (dwReason == DLL_PROCESS_ATTACH)
          {
          // Extension DLL one-time initialization
          if (!AfxInitExtensionModule(extensionDLL, hInstance))
             return false;
          }   return(true);
    }    然后,每次使用 DLL 资源时,你必须改变资源的句柄,使其指向 DLL,并保存 exe 的资源,以便以后正确恢复。void get_DLL_resource(void)
    {
       /* this function changes the resource handle to that of the DLL */
       //这个函数改变资源句柄使其指向DLL
       if (resource_counter == 0)
          {
          save_hInstance = AfxGetResourceHandle();
          AfxSetResourceHandle(extensionDLL.hModule);
          }   resource_counter++;
    }    接着你需要其它函数来恢复资源句柄:void reset_DLL_resource(void)
    {
       /* this function restores the resource handle set by
    'get_DLL_resource()' */   if (resource_counter > 0)
          resource_counter--;   if (resource_counter == 0)
          AfxSetResourceHandle(save_hInstance);
    }    接下来一点非常重要,只要有可能就必须恢复资源句柄,否则,你将会遇到许多问题。原因是可执行文件必须重画工具条等等,比如说,如果用户移动 DLL 的对话框,如果资源句柄仍然为 DLL 的资源,程序就崩溃了,我发现最好恢复句柄的时机在对话框的 OnInitDialog() 中,这时对话框的模板等已经读出了。
      

  3.   

    哪位老大可以给个例子???!!!
    [email protected]
    我始终不能 成功!!
      

  4.   

    google查找动态库*输出类几乎没有有用的资料  :(
    有一个是本站的,不过没详细讲解!
    我试了一下,不行:(
      

  5.   

    jennyvenus(JennyVenus)已经把细节讲得很清楚了。
    在dll中定义一个CDialog的派生类(用dll中的dialog template资源)。用__declspec(export)把整个类导出。
      

  6.   

    老大们 将 ftp://pub:[email protected]/TEMP/testdlg.zip
    down下来看看问题在什么地方?如何解决?
    联系:[email protected]
      

  7.   

    也可以在你的Dll里面做一个引出函数,在函数中调用对话框,你在外面的工程中调用这个引出函数,我觉得这样做更好,而且我也是这么做的,没有问题。
      

  8.   

    我知道这样做没问题,可我不想这样做,如果 引出函数 ,那么,我的好多dialog的我定义的函数都要引出了,工作量太大了