unit aa
interface
...
function showcalendar(AHandle:THandle;ACaption:String);TDateTime;stdcall;
...implementationfunction showcalendar(AHandle:THandle;ACaption:String);TDateTime;
...
Application.Handle:=AHandle;
...请问AHandle是个什么类型的句柄?(书上好像是讲应用程序的句柄)是当前所在应用程序的句柄吗?还是所在模块的句柄?
另外:HInstance不也是应用程序的句柄吗?这之间有什么区别?
还请高手指点,谢谢!
interface
...
function showcalendar(AHandle:THandle;ACaption:String);TDateTime;stdcall;
...implementationfunction showcalendar(AHandle:THandle;ACaption:String);TDateTime;
...
Application.Handle:=AHandle;
...请问AHandle是个什么类型的句柄?(书上好像是讲应用程序的句柄)是当前所在应用程序的句柄吗?还是所在模块的句柄?
另外:HInstance不也是应用程序的句柄吗?这之间有什么区别?
还请高手指点,谢谢!
HInstance在VC中的类型是HInstance,表示应用程序或者Dll模块的实例句柄
而THandle一般是窗口的的句柄,如Form, Button,ListBox等,
针对Application来说,这两个变量的含义也是不一样的
Application.Handle是应用程序主窗口的名柄,即MainForm.Handle
HInstance是HInstance contains the instance handle of the application or library as provided by the Windows environment
由Windows系统管理的一些对象,比如窗口,菜单,应用程序等等,用户的应用程序可能需要使用这些对象,但是如果Windows系统简单的把指向这些对象的指针交给程序员,就像爱捣蛋的C程序员经常干的那样,这些程序员可能会通过这些指针,有意无意的破坏系统数据,导致整个系统出问题。
所以不能直接把这些系统对象的指针交给程序员,windows系统自己维护了一个表,用Handle来唯一标示这些系统对象,程序员通过调用API,传递Handle来操纵这些系统对象,Windows内部再通过这些Handle找到实际的系统对象,然后进行相应的操作。
这就避免了让程序员直接接触系统对象内存指针的可能。说白了,Handle就是所有由Windows系统管理的对象的一个身份证号码。