问题: 在纯资源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); } 然后怎样让对话框显示出来?
请帮我把代码补全,谢谢!
我要使用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); } 然后怎样让对话框显示出来?
请帮我把代码补全,谢谢!
pDlg->DoModal();用完之后要把资源设回去,所以用SetResourceInstance可以返回一个被替换的资源句柄。
#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
在DLL调用DLL的资源前加上上面这句。