Description
Before you call routines from a DLL, you should define the types of these routines. IDefineDLL
is an auxiliary object used to define types of the DLL routines and define aliases for the routine names.
To get the IDefineDLL
object, use the DLL.DefineDLL
or IDLLAccessProcess.DefineDLL
method.
Note: | If the DLL was built with debug information, there is no need to define routine types. Information on the routine types is taken from the debug information. However, you can redefine the function types by using methods of the IDefineDll object. In this case, user routines will overwrite the original ones taken from the debug information. |
Members
Example
The code below defines the DLL type, then defines the procedure from this DLL and calls this routine from script at the end of the test.
JavaScript, JScript
function DefineProcDemo()
{
// Defines the DLL type
var DefDLL = DLL.DefineDLL("user32");
// Loads the DLL in memory
var Lib = DLL.Load("C:\\Windows\\System32\\user32.dll");
// Defines the procedure
DefDLL.DefineProc("GetWindowTextA", VT_UI4, VT_LPSTR, VT_I4, VT_I4);
// ...
// Creates an alias for the procedure
DefDLL.DefineAlias("GetWindowText", "GetWindowTextA");
// ...
var hndl = Sys.Process("Notepad").Window("Notepad").Handle;
var winText = DLL.New("LPSTR", 256);
// Calls the routine using the alias
Lib.GetWindowText(hndl, winText, 20);
Log.Message(winText)
}
Python
def DefineProcDemo():
# Defines the DLL type
DefDLL = DLL.DefineDLL("user32")
# Loads the DLL in memory
Lib = DLL.Load("C:\\Windows\\System32\\user32.dll")
# Defines the procedure
DefDLL.DefineProc("GetWindowTextA", VT_UI4, VT_LPSTR, VT_I4, VT_I4);
# ...
# Creates an alias for the procedure
DefDLL.DefineAlias("GetWindowText", "GetWindowTextA");
# ...
hndl = Sys.Process("Notepad").Window("Notepad").Handle
winText = DLL.New("LPSTR", 256)
# Calls the routine using the alias
Lib.GetWindowText(hndl, winText, 20)
Log.Message(winText)
VBScript
Sub DefineProcDemo
' Defines the DLL type
Set DefDLL = DLL.DefineDLL("user32")
' Loads the DLL in memory
Set Lib = DLL.Load("C:\Windows\System32\user32.dll")
' Defines the procedure
Call DefDLL.DefineProc("GetWindowTextA", VT_UI4, VT_LPSTR, VT_I4, VT_I4)
' ...
' Creates an alias for the procedure
Call DefDLL.DefineAlias("GetWindowText", "GetWindowTextA")
' ...
hndl = Sys.Process("Notepad").Window("Notepad").Handle
Set winText = DLL.New("LPSTR", 256)
' Calls the routine using the alias
Call Lib.GetWindowText(hndl, winText, 20)
Call Log.Message(winText)
End Sub
DelphiScript
procedure DefineProcDemo;
var DefDLL, Lib, hndl, winText;
begin
// Defines the DLL type
DefDLL := DLL.DefineDLL('user32');
// Loads the DLL in memory
Lib := DLL.Load('C:\Windows\System32\user32.dll');
// Defines the procedure
DefDLL.DefineProc('GetWindowTextA', VT_UI4, VT_LPSTR, VT_I4, VT_I4);
// ...
// Creates an alias for the procedure
DefDLL.DefineAlias('GetWindowText', 'GetWindowTextA');
// ...
hndl := Sys.Process('Notepad').Window('Notepad').Handle;
winText := DLL.New('LPSTR', 256);
// Calls the routine using the alias
Lib.GetWindowText(hndl, winText, 20);
Log.Message(winText);
end;
C++Script, C#Script
function DefineProcDemo()
{
// Defines the DLL type
var DefDLL = DLL["DefineDLL"]("user32");
// Loads the DLL in memory
var Lib = DLL["Load"]("C:\\Windows\\System32\\user32.dll");
// Defines the procedure
DefDLL["DefineProc"]("GetWindowTextA", VT_UI4, VT_LPSTR, VT_I4, VT_I4);
// ...
// Creates an alias for the procedure
DefDLL["DefineAlias"]( "GetWindowText", "GetWindowTextA" );
// ...
var hndl = Sys["Process"]("Notepad")["Window"]("Notepad")["Handle"];
var winText = DLL["New"]("LPSTR", 256);
// Calls the routine using the alias
Lib["GetWindowText"](hndl, winText, 20);
Log["Message"](winText)
}
See Also
Calling DLL Functions From Tests
DLL Object
IDLLAccessProcess Object
Calling DLL Functions From Tests - Tutorial