问题: 在纯资源DLL中的对话框怎样通过调用显示出来?
    我要使用Resource-Only DLL,下面是我编程的主要步骤: 
    DLL: 用appwizard产生了一个win32 dll; 
    然后project->new加入了一新的rc文件; 
    insert一个dialog;(ID:IDD_DIALOG,Caption:Dialog) 
    
    编译生成Resource.dll文件。 
    客户程序是一个简单的基于对话框的exe,只有ok和cancel两个button,我希望按下ok就能显示dll中定义的对话框。 
    OnOk() 
    { 
     HINSTANCE hDll;  
     hDll=LoadLibrary("ResourceDLL.dll"); 
     if(hDll==NULL) 
          AfxMessageBox("Can't Load the library"); 
     else 
          AfxMessageBox("success"); 
     AfxSetResourceHandle(hDLL);      } 然后怎样让对话框显示出来?
    请帮我把代码补全,谢谢! 

解决方案 »

  1.   

    你已经把资源设过来了,直接用就行了。对话框的资源号最好用字符串。CDialog * pDlg = new("DIALOG_NAME",this);
    pDlg->DoModal();用完之后要把资源设回去,所以用SetResourceInstance可以返回一个被替换的资源句柄。
      

  2.   

    首先在ctestapp类定义里加入
    #ifdef USE_RESDLL
    public:
    virtual int ExitInstance();
    private:
    HINSTANCE m_hInstDLL;
    #endif //USE_RESDLL
    初始化代码里加入
    BOOL CTestApp::InitInstance()
    {....
    #ifdef USE_RESDLL
    if ((m_hInstDLL=LoadLibrary("resdll.dll"))==NULL)
    {
    return false;
    }
    else
    AfxSetResourceHandle(m_hInstDLL);
    #endif
    ...
    }
     #ifdef USE_RESDLL
    int CTestApp::ExitInstance()
    {
    FreeLibrary(m_hInstDLL);
    return CWinApp::ExitInstance();
    }
    #endif
    project->setting->c/c++
    preprocessor definitions 里加多一个USE_RESDLL
      

  3.   

    就可以像平時一樣使用你的資源dll中的資源了.
      

  4.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    在DLL调用DLL的资源前加上上面这句。