TComponent:
新建一个VCL.net工程,然后在Form上放一个Tedit或是Tmemo按f9,你会发现在代码编辑器上面的uses里比以前多了一个System.ComponentModel,如下所示。
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls;
这是为什么?也是很简单,打开Borland.Vcl.Classes.pas文件找到114行有如下声明:TComponent = System.ComponentModel.Component;好了。。和TObject一样我们现在的Tcomponet已经和原先那个完全不同了,只是具有相同的名字,而且你也不用操心Tcomponent怎么实现的了,因为System.ComponentModel.Component的源码是不公开的。类似的还有 TPersistent = System.MarshalByRefObject 等等。
Windows.Pas
我们看一下这个单元吧,里面有一些对Windows Api的直接声明和调用。打开Borland.Vcl.Windows.pas找到19871行,看看implementation下面的一些Api的
声明如下:
[DllImport(advapi32, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = ''''AbortSystemShutdown'''')]
function AbortSystemShutdown; external;
上面那个[Dll... ]学过点.net的都知道是Attribute,是一种新东东好像Java里也没这个,算是.net原创的了(具体怎么用在csdn文档区见过一系相关文章请找一下)对于[Dll Import ……….]看一下MSDN:“ DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口点的 DLL 的名称。”也就是说在.net里要使用一个像Windows Api所在的DLL或是普通基于Win32的DLL这样的库时都要像这种格式先用Attribute声明,然后.net系统就会知道这是一个非安全代码组成的程序,于是像下图这样进行调用。我个人认为这种方法并不是‘纯.net的方法’,只是能够让程序运行而已,是一种兼容的方法。换言之VCL.net在某种程度上说是兼容运行于.net平台的,并不是.net原生方式,或者说在一定程度上是以Win32程序的托管方式运行,所以………(纯属个人想法)。请参考下图:
(以下图及注解摘自MSDN.net)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




