社区
进程/线程/DLL
帖子详情
在DLL中用DialogBox函数产生一个对话框,为什么产生的却是调用者(exe)中的资源的对话框,而不是DLL资源中的对话框。如何让它产生dll资
sun4216
2007-09-17 05:00:31
如题
...全文
186
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);
}
iOS8开发技术(Swift版):SearchBar和
对话框
搜索条和
对话框
(详细内容看目录)
问C#高手: [
Dll
Import(“kernel32.
dll
“)]是什么意思??
这叫引入kernel32.
dll
这个动态连接库。 这个动态连接库里面包含了很多WindowsAPI
函数
,如果你想使用这面的
函数
,就需要这么引入。举个例子: [
Dll
Import("kernel32.
dll
")] private static extern void
函数
名(参数,[参数]);
函数
名就是
一个
属于kernel32.
dll
里的
一个
函数
。完了你就可以用那个
函数
了。 kernel32.
dll
调用kernel32.
dll
这个
DLL
里面的API接口! 系统API 例如 [
Dll
Import(...
[
Dll
Import("kernel32.
dll
")]详解
这叫引入kernel32.
dll
这个动态连接库。 这个动态连接库里面包含了很多WindowsAPI
函数
,如果你想使用这面的
函数
,就需要这么引入。举个例子: [
Dll
Import("kernel32.
dll
")] private static extern void
函数
名(参数,[参数]);
函数
名就是
一个
属于kernel32.
dll
里的
一个
函数
。完了你就可以用那个
函数
了。
C#调用WIN32的API
一.基础知识 Win32 API是C语言(注意,不是C++语言,尽管C语言是C++语言的子集)
函数
集。C#语言与C语言是完全不同的(除了语法上比较像),所以,要想用C#语言调用C语言的Win32 API,要费上一番周折。首先我们就要准备一些基础知识。1.Win32 API
函数
放在哪里? Win32 API
函数
是Windows的核心,比如我们看到的窗体、按钮、
对话框
什么的,都是依靠W...
基于Visual C++ 6.0的
DLL
通论(翟超)
基于Visual C++ 6.0的
DLL
通论一、前言 在Windows操作系统
中
几乎所有的内容都由
DLL
以一种或另外一种形式代表着,(例如显示的字体和图标存储在GDI
DLL
中
、显示Windows桌面和处理用户的输入所需要的代码被存储在
一个
User
DLL
中
、Windows编程所需要的大量的API
函数
也被包含在Kernel
DLL
中
)。 在Wi
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章