HInstance是个什么东西呀?它与application.handle;self.handle有什么区别?(20分)

  • 主题发起人 主题发起人 jonjon
  • 开始时间 开始时间
J

jonjon

Unregistered / Unconfirmed
GUEST, unregistred user!
HInstance是个什么东西呀?它与application.handle;self.handle有什么区别?
 
相当于句柄. application.handle为当前应用程序的句柄.self.handle为当前对象的句柄.
Hinstance可以为调用的dll的句柄.
 
我的应用程序没有调用DLL怎么Hinstance也会有值?是不是所有的应用程序Hinstance的值都是一样的?
 
HInstance 是一个全局变量,代表当前程序或DLL的实例句柄
 
smithcouple
代表当前程序指的是什么?如果我运行了一个计算器,那么当前程序就是计算器了?
我用同一段代码做了两个执行档如下:
showmessage(inttostr(HInstance));
这两个执行档都打开,两个showmessage的值是一样的,我不明白它到底代表了谁?
 
就是指你刚刚编译好运行的这个程序实例,他是程序(exe or dll)的“唯一的”标识 HInstance = Handle of Instance
Handle只是一个窗口(并不一定是Form,其实从TWinControl继承的类其实都应该算)的句柄
 
我用同一段代码做了两个执行档如下:
showmessage(inttostr(HInstance));
这两个执行档都打开,两个showmessage的值是一样的,我不明白它到底代表了谁?
既然是唯一的,为什么我上面说这个情况它们的值是一样的,我就是这里搞不明白。
 
以下是从大富翁离线上抄的资料,兄弟可以看看:

HInstance是你的EXE或者DLL加载内存的首地址,很多查找资源文件的函数都需要这个值

在Delphi中,可以通过访问一个叫HInstance的全局变量来获取本应用程序的实例句柄。
如果一个程序编译成包,那么HInstance并不代表应用程序的模块句柄。此时要用MainInstance
来访问宿主程序的模块句柄,而HInstance代表代码所在的模块句柄。
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(getmodulehandle('本程序在磁盘上的全路径名'));
Caption := Caption + '|' + IntToStr(HInstance);
end;
得出的结论是一样的。
 
为什么我在任何时候任何一台电脑得到的HInstance的值都是一样的?
如果是句柄的话应该是唯一的,而且是随机的,可是我还有如下疑问:
1、同时运行多个程序,得到的HInstance的值是一样的。
2、不管什么时候运行,得到的HInstance的值是一样的。
 
多人接受答案了。
 

Similar threads

回复
0
查看
606
撒玛利亚人
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部