调用Win32API的函数
TC能调用那些Win32平台通用的函数,包括Windows 95、Windows 98、Windows NT,Windows 2000和Windows XP,不能调用那些只在Windows NT,2000,XP或Windows Server 2003才有的函数。
在脚本编辑时,输入Win32API关键字后,使用Code Completion,会列出所有支持的函数调用。
调用Win32API的函数时需要注意两点:
1、 因为Microsoft OLE不支持指针,所以你不能使用那些有指针参数的或者是返回指针给数据结构的API函数。有一个例外是:在某些函数,你可以传入0作为指针值。这个技巧可以帮助你调用某些特定的函数,例如CreateDC。
但是,这个限制对那些使用数据结构的函数不生效。Win32API对象包括某些特定的方法(例如_DOCINFO)创建一个编程对象,为数据结构提供一个脚本接口。然后,你可以使用这个对象来填充结构区域并且传递这些结构给函数作为参数。例如,你可以调用_DOCINFO来为DOCINFO结构创建一个对象然后传递这个对象给StartDoc函数作为参数。
2、 如果一个参数是作为引用传递的并且用于返回值,则返回值对于TC脚本而言无效。但是如果传入的引用参数是一个结构,那么你可以使用这种类型的API函数。TC提供一些包装的对象(Wrapper Object),即预定的结构,当然你也可以自己定义结构。
例如,你可以使用TRect结构如下:
structRect := TRect;
这个包装对象包含跟结构成员一致的属性,使用相同的名称。例如,下面脚本设置TRect结构的left和top边界值:
structRect.Left := 10;
structRect.Top := 10;
调用.NET Assembly的函数
在TC脚本中你可以调用任何.NET assembly中的函数。可以是.NET Framework的,也可以是第三方.NET程序的。
为了调用.NET Assembly的函数,先要在CLR Bridge的属性页选中使用assembly。
在脚本中使用dotNET对象访问assembly提供的属性或方法。调用格式如下:
dotNET.namespace.class.subclass.method()
dotNET.namespace.class.subclass.property
注意:namespace和class、subclass的名称之间用点隔开,而namespace名称中包含的分隔点要用下划线替换。
如果类的实例不存在,你只能调用这个类的静态方法。要想调用属性和非静态方法,你应该首先通过这个类的构造器创建一个实例。通常类构造器的名称是_ctor。一个类可以有多个构造器(_ctor(),_ctor2(),_ctor3()等)。
但是在VBScript中不能识别由下划线开头的标识符,因此为了让_ctor方法与VBScript兼容,TC修改了这些方法的名称,替换成z开头,例如调用_ctor3,则应该使用zctor3。
下面例子说明如何在脚本中从mscorlib assembly创建String对象并调用其方法:
procedure AssemblyTest;
var