Knowledge Base Article

Home Page > Knowledge Base > Rapise

Article Using Dynamic Linked Library (DLLs) in Test Scripts

by Jim R. on Friday, February 20, 2015

Sometimes you need to call code libraries from your Rapise tests, for example when the built-in JavaScript scripting engine does not provide the necessary functionality. This guide explains how to call an external DLL from your Rapise test script.

Rapise provides APIs for calling managed (.NET) and UnMnaged(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:

 

inst = 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
 

fieldValue = g_util.GetFieldValue( obj, fieldName )

 

Parameters

  • obj: object that owns the field.
  • fieldName: name of the field.

Return Valuefield 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 Valueresult 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 "DynaWrapper" 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);

 

Attachments
Article Info
Last Updated: 2/20/2015
Article ID: KB129
# Views: 888
Powered by KronoDesk v1.1.0.15 | © Copyright Inflectra Corporation 2011-2016 | Licensed to Inflectra Corporation.