手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi 8 for .net 第一时间 之 分析篇

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!