SDK中有关模块句柄(hInstance),窗口类,窗口句柄的困惑!!

hotboy 2007-08-28 08:30:19
(1)进程本身的模块句柄(hInstance)一般为0x400000,而DLL模块的缺省句柄为0x10000000。这里的句柄是否就是虚拟地址???,如果一个进程同时调用几个DLL模块,而这几个DLL模块都采用缺省句柄0x10000000,岂不是最终虚拟地址乱了???(或者是如何避免的)
(2)注册窗口类(RegisterWindow)的hInstance,以及创建的窗口实类(CreateWindow)的hInstance,又是什么?(2)的hInstance与(1)有关系吗??
另外(2)的hInstance是否需要唯一的(对于OS而言),还是对于本进程唯一就可以了??
请大师指点!!不胜感激!!!
...全文
266 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotboy 2007-08-28
  • 打赏
  • 举报
回复
谢谢lisunlin0(李林) 的回答!第一个问题我明白了。

对于我的第二个问题,我想说的是,好多书上讲的似乎是注册窗口的hInstance与创建窗口的hInstance表示在操作系统全局唯一的ID。那么OS是否要为每个窗口生成不重复的ID,还是我理解错了?
sunlin7 2007-08-28
  • 打赏
  • 举报
回复
(1)进程本身的模块句柄(hInstance)一般为0x400000,而DLL模块的缺省句柄为0x10000000。这里的句柄是否就是虚拟地址???,如果一个进程同时调用几个DLL模块,而这几个DLL模块都采用缺省句柄0x10000000,岂不是最终虚拟地址乱了???(或者是如何避免的)

HINSTANCE正是PE被加载的虚拟地址。
DLL模块是可重定位的,当0x10000000已经有模块占用的时候,系统会将其加载到另外合适的地址中。
你可以将同一个DLL复制一份试一试。
hDll1=LoadLibrary("..\\..\\dllTest\\Debug\\dllTest1.dll")
hDll2=LoadLibrary("..\\..\\dllTest\\Debug\\dllTest2.dll")//其中dlltest1.dll 与dlltest2..dll是同一个文件的不同副本,这你就会发现hDll1与hDll2不同了。
(2)注册窗口类(RegisterWindow)的hInstance,以及创建的窗口实类(CreateWindow)的hInstance,又是什么?(2)的hInstance与(1)有关系吗??
HINSTANCE就是模块句柄嘛,在同一个进程中注册窗口的hInstance与创建窗口的hInstance可以不同,比如在exe中注册一个窗口类,而在这个进程中的一个dll里面用这个类创建窗口,dll则创建窗口时的hInstance应该是dll的模块句柄。
hotboy 2007-08-28
  • 打赏
  • 举报
回复
各位高手赶紧出手啊
hotboy 2007-08-28
  • 打赏
  • 举报
回复
各位高手可以再对我的第(2)个问题指点指点吗????????谢谢!
hotboy 2007-08-28
  • 打赏
  • 举报
回复
可是如下代码
int main(int argc, char* argv[])
{
HINSTANCE hDll;
lpAddFun addFun;
hDll=LoadLibrary("..\\..\\dllTest\\Debug\\dllTest.dll");////这里的hDll调试发现永远0x10000000
addFun=(lpAddFun)GetProcAddress(hDll,"_add@8");
int result=addFun(2,3);
printf("%d",result);
FreeLibrary(hDll);
return 0;
}
冷月清晖 2007-08-28
  • 打赏
  • 举报
回复
2.hInstance 标识注册该类的DLL或应用程序实例,在创建一个窗口之前,必须注册
冷月清晖 2007-08-28
  • 打赏
  • 举报
回复
1. 加载到进程地址空间的每个可执行文件或DLL文件均被赋予一个独一无二的实例句柄
Windows核心编程 P49
hotboy 2007-08-28
  • 打赏
  • 举报
回复
系统说我提前的太频繁了!!!
但是我想急切的知道答案,谢谢大师再度出手!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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