Rapise provides APIs for calling managed (.NET) and UnManaged(x86) dynamic link libraries (DLLs) from test scripts.
Managed (.NET) DLLs
There are 3 methods defined for object g_util to access the managed DLL:
var obj = g_util.CreateClassInstance( dllPath, className )
Parameters
- dllPath: path to the DLL containing the class.
- className: name of class.
Return Value: class instance.
g_util.SetFieldValue( obj, fieldName, value )
Parameters
- obj: object that owns the field.
- fieldName: name of the field.
- value: value to set
Return Value: no return value.
fieldValue = g_util.GetFieldValue( obj, fieldName )
Parameters
- obj: object that owns the field.
- fieldName: name of the field.
Return Value: field value.
g_util.InvokeMember(dllPath, className, methodName, obj, methodParams )
Parameters
- dllPath: path to the DLL containing the class.
- className: name of the class containing specified method.
- methodName: name of the method to evaluate.
- obj: an instance of object.
- methodParams: parameters of the method.
Return Value: result of the method call.
Sample
var calc = g_util.CreateClassInstance(("TestLibrary\\TestLibrary\\bin\\Release\\TestLibrary.dll", "TestLibrary.Calculator");
g_util.InvokeMember(
"TestLibrary\\TestLibrary\\bin\\Release\\TestLibrary.dll",
"TestLibrary.Calculator",
"GetName",
null,
[]
);
var strictMode = g_util.GetFieldValue(calc, "strictMode");
UnManaged (x86) DLLs
Treatment of x86 (native) DLLs is done via DynamicWrapper helper object. This object links to functions exported from DLL by means of Register method.
For example, calling MessageBox may be done as follows:
var UserWrap = WScript.CreateObject("DynamicWrapper");
// Call MessageBoxA(), first register the API function
// i=describes the number and data type of the functions parameters
//
// f=type of call _stdcall or _cdecl. So it can work with both MS C++ and
// Borland C++. Default to _stdcall. If that doesn't work use _cdecl. If
// that doesn't work good luck!
//
// r=return data type.
//
// a IDispatch*
// c signed char
// d 8 byte real
// f 4 byte real
// k IUnknown*
// h HANDLE
// l long
// p pointer
// s string
// t short
// u unsigned int
// w wide string
UserWrap.Register("USER32.DLL", "MessageBoxA", "I=HsSu", "f=s", "R=l");
// now call the function
UserWrap.MessageBoxA(null, "MessageBox (ANSI)", "From DynaWrap Object", 3);