纯资源dll的问题

qwer1919qwer 2008-02-23 03:19:05
请问大家:VC++中如果我将对话框做成纯资源dll,在其它程序中引用以后,我又想为此对话框关联一个类,应该怎么做?谢谢~
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwer1919qwer 2008-02-24
  • 打赏
  • 举报
回复
如果直接把IDD的值改成资源DLL中的ID值,它就会提示我说此ID值未定义~
qwer1919qwer 2008-02-24
  • 打赏
  • 举报
回复
谢谢jameshooo对我的问题的回复!

大概是我没说清楚,我的问题是想在其它程序中为dll中的对话框资源创建一个类,比如:<class MyDialog : public Dialog …>,以便我在此类中添加一些针对此对话框操作的消息处理函数,应该怎么做?

楼上的方法似乎只是简单的调用,希望大家能帮帮忙~
qwer1919qwer 2008-02-24
  • 打赏
  • 举报
回复
解决啦,谢谢,你太有才了^-^
jameshooo 2008-02-24
  • 打赏
  • 举报
回复
我说的就是在其它程序中创建类,你应该也包括资源DLL中resource.h文件,或者手工创建这些ID定义,或者不用宏直接用ID的值,否则会出现ID未定义的情况。
上面的原理并不是直接调用,而是类似下面的代码:
class CMyDialog : public CDialog
{
...
UINT DoModal(...)
{
HINSTANCE hOld = AfxGetResourceHandle();
HMODULE hDllHandle = AfxLoadLibrary("res.dll");
AfxSetResourceHandle(hDllHandle);

UINT uiRet = CDialog::DoModal(...);

AfxSetResourceHandle(hOld);
AfxFreeLibrary(hDllHandle);
return uiRet;
}

BOOL Create(...)
{
HINSTANCE hOld = AfxGetResourceHandle();
HMODULE hDllHandle = AfxLoadLibrary("res.dll");
AfxSetResourceHandle(hDllHandle);

BOOL bRet = CDialog::Create(...);

AfxSetResourceHandle(hOld);
AfxFreeLibrary(hDllHandle);
return bRet;
}

......
};
jameshooo 2008-02-23
  • 打赏
  • 举报
回复
按照正常方式创建一个类,IID的值改成资源DLL中的ID值,然后有两种方法:
1、重载DoModal和Create函数,在函数里面首先调用AfxSetResourceHandle(DllHandle),函数退出前再次调用以恢复旧的资源句柄。
2、不重载DoModal和Create,但是外部创建对话框时不能调用Dlg.DoModal/Dlg.Create,相反应该调用Dlg.InitModalIndirect/Dlg.CreateIndirect,调用之前你必须从资源DLL中读取对话框资源到内存中,然后强制转换成LPCDLGTEMPLATE

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧