社区
进程/线程/DLL
帖子详情
在DLL中用DialogBox函数产生一个对话框,为什么产生的却是调用者(exe)中的资源的对话框,而不是DLL资源中的对话框。如何让它产生dll资
sun4216
2007-09-17 05:00:31
如题
...全文
227
8
打赏
收藏
在DLL中用DialogBox函数产生一个对话框,为什么产生的却是调用者(exe)中的资源的对话框,而不是DLL资源中的对话框。如何让它产生dll资
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Chivalry
2007-09-18
打赏
举报
回复
假设你生成的DLL名字叫做MyDll.dll
HANDLE hDLL = (HANDLE)GetModuleHandle("MyDll");
sun4216
2007-09-18
打赏
举报
回复
我的DLL没有DLLMAIN函数,但我用GetModuleHandle(NULL)获得DLL hInstance。结果还是不行。
flyelf
2007-09-18
打赏
举报
回复
you must use the Instance Handle which from the DllMain function
lyg_zy
2007-09-18
打赏
举报
回复
你用DialogBox或DialogBoxParam显示对话框吧。
那他们的第一个参数就是HINSTANCE hInstance呀。这里的hInstance要传你的dll的hInstance.
大概的示例代码:
HINSTANCE g_hModule
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
g_hModule = hInstance;
}
DialogBox( g_hModule ,....);
DialogBoxParam ( g_hModule ,....);
sun4216
2007-09-18
打赏
举报
回复
怎么都是用MFC呀,有没有SDK的版本呀。谢谢了
ouyh12345
2007-09-17
打赏
举报
回复
dll中,如果没做特殊处理,引用的是应用程序的资源。
得切换到dll的资源中。
用AFX_MANAGE_STATE(AfxGetStaticModuleState());
或得到dll的instance,加载资源时,用此instance
sun4216
2007-09-17
打赏
举报
回复
我用的是SDK呀,有没有SDK的版本?谢谢了
vocanicy
2007-09-17
打赏
举报
回复
这是因为在主程序的资源链中无法查找到这个对话框资源
需要在创建对话框之前将当前资源的handle切换到对话框的资源
hOldRes = AfxGetResourceHandle();
AfxSetResourceHandle(hDLL);
// 创建对话框,结束后将资源句柄恢复
。。。
AfxSetResourceHandle(hOldRes );
我这里写了一个自动切换的简单类,你直接用就可以了
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CResourceLock ResLock(g_hModule); // 增加这一句,其中g_hModule是动态库的hInstance,在DllMain中保存的全局变量
CwmaDlg dlg;
dlg.DoModal();
return 0;
}
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
g_hModule = hInstance;
}
......
// h
class CResourceLock
{
public:
CResourceLock(HINSTANCE hInstance);
virtual ~CResourceLock();
private:
HINSTANCE m_hInstance;
};
// cpp
CResourceLock::CResourceLock(HINSTANCE hInstance)
{
m_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(hInstance);
}
CResourceLock::~CResourceLock()
{
AfxSetResourceHandle(m_hInstance);
}
VS2019
EXE
程序如何链接(使用)
DLL
动态库
中
的
资
源控件如
Dialog
Box
本文详细讲解了静态库与动态库的区别,并重点介绍了如何在
DLL
中
使用
资
源,包括如何正确设置和使用HMODULE来调用
DLL
中
的
资
源控件。
在
DLL
中
产生
对话框
的方法一(Win32
DLL
)
本文介绍了如何在Win32
DLL
中
创建modal和modeless
对话框
。通过具体代码示例展示了
对话框
的实现方法,包括消息处理及
资
源管理。
在
DLL
中
运用
资
源(一)
本文介绍了如何在Win32
DLL
和MFC
DLL
中
使用
对话框
资
源。通过具体实例展示了在
DLL
中
添加
对话框
资
源及使用Create
Dialog
和
Dialog
Box
函数
创建
对话框
的方法。同时探讨了在MFC
DLL
中
因模块状态问题而
产生
的
资
源重复问题及其解决方案。
如何在
dll
中
添加
资
源
本文详细介绍了如何在Win32
DLL
和MFC
DLL
中
使用
对话框
等
资
源,包括
资
源加载过程和模块状态管理。
[SDK] -模态
对话框
和 非模态
对话框
本文主要讲解Windows SDK
中
对话框
的相关知识。介绍了创建
对话框
的步骤,包括通过菜单绑定模态和非模态
对话框
的方法,分析了模态
对话框
阻塞父窗口的原因。还对相关API如
Dialog
Box
、Create
Dialog
等进行讲解,并配有画面演示,最后总结了模态与非模态
对话框
的区别。
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章