s, i : OleVariant;
begin
// Calling a constructor and a property
// Note the absence of the underscore
s := dotNET.System.String.ctor8($41, 3);
Log.Message(s.Length);
// Calling a static method
s := dotNET.System.String.Copy('Test');
Log.Message(s.OleValue); // Using the OleValue property
// Calling a non-static method
i := s.IndexOf('t');
Log.Message(i);
end;
调用DLL的函数
为了调用一个DLL的函数,你需要执行一系列的操作:
1、 定义DLL类型
2、 在TC中定义参数的数据类型
3、 定义函数类型
4、 创建数据结构并用数据填充
5、 加载DLL到内存
6、 调用函数
例如,如果我们要从User32DLL中调用一个名叫DrawTextEx的函数,则需要以下步骤:
1、 定义DLL类型。
使用DefineDLL方法来定义一个新的DLL类型如下:
Def_DLL:=DLL.DefineDLL(‘USER32’);
2、 看看函数定义和判断参数是否兼容OLE。TC引擎能处理OLE兼容的数据类型;OLE不兼容的数据类型则需要特殊处理。所以要判断参数类型。DreawTextEx定义如下:
int DrawTextEx(
HDC hdc,
LPTSTR lpchText,
int cchText,
LPRECT lprc,
UINT dwDTFormat,
LPDRAWTEXTPARAMS lpDTParams);
其中有一些是OLE不兼容的数据类型,所以下一步是在TC中定义这些数据类型。
3、 定义参数类型。
对于lprc,它是对RECT结构的指针,为了在TC中定义它的数据类型,调用DLL.DefineType方法。在TC中注册新的数据类型并返回ID。返回的ID可以用在其它数据类型或函数参数的定义上。例如下面脚本定义名叫MyStruct的结构类型:
DefType := DLL.DefineType('MyStruct', // name of the new structure
vt_i4, 'Value',
vt_byref or vt_i4, 'ValueByRef', // pointer to integer
vt_byref or myID, 'MyStruct2'); // pointer to structure MyStruct2
注意DefineType注册的只是数据类型,不会创建这个类型的变量。要想创建这个新类型的变量,需要调用DLL.New,例如下面脚本调用DLL.New创建RECT类型的变量:
r := DLL.New('RECT');
文章来源于领测软件测试网 https://www.ltesting.net/