11.4. Вызов API-функций и функций из DLL

Назад: 11.3 Использование библиотеки распознавания текста (OCR) Содержание Дальше: 11.5 Вызов функций из .NET сборок

Вызов функций из DLL

Вызов DLL-функций в TestComplete – процесс сложный. Мы рассмотрим самый простой пример: функция LockWorkStation из файла user32.dll, которая блокирует компьютер.

В общем случае, для того, чтобы вызвать функцию из DLL, необходимо выполнить следующие действия:

  • Определить тип DLL
  • Описать параметры типов данных
  • Описать функцию, которую мы вызываем
  • Заполнить структуры данных передаваемых параметров
  • Загрузить DLL в память
  • Вызвать описанную функцию

В нашем примере функция LockWorkStation не принимает никаких параметров, что существенно упрощает задачу. Ниже показан пример вызова этой DLL-функции.

function TestDLL()

{

  // определяем новый тип DLL 

  user32dll = DLL.DefineDLL(“MyDLL”);


  // описываем вызываемую функцию 

  // последний параметр – возвращаемое значение, должен быть указан обязательно 

  // в нашем случае функция не возвращает никакого значения, поэтому

  // указан тип vt_void

  proc = user32dll.DefineProc(“LockWorkStation”, vt_void);


  // загружаем DLL в память, связывая имя DLL-файла с созданным ранее типом DLL

  lib = DLL.Load(“C:\\Windows\\System32\\USER32.DLL”, “MyDLL”);


  // вызываем функцию

  lib.LockWorkStation();

}

Подробнее о вызове функций из DLL можно прочитать в справочной системе TestComplete, раздел How to Call a DLL Routine From Your Script.

Вызов API-функций

Для вызова API-функций в TestComplete существует объект Win32API. С его помощью можно вызывать API-функции, общие для всех версий Windows начиная с версии 2000 и выше. Объект Win32API не поддерживает специфические функции для определенных платформ.

Кроме того, так как Microsoft OLE не поддерживает указатели, в TestComplete нет возможности вызывать API-функции, которые работают с указателями, принимая их в качестве параматров или возвращая указатели (например, ShellExecute).

Пример вызова API-функции:

function TestWinAPI()

{

  var res = Win32API.GetCommandLine();

  Log.Message(res);

}

Этот пример выведет в лог TestComplete-а значение «C:\Program Files\Automated QA\TestComplete 7\Bin\TestComplete.exe».

При вызове API-функций таким образом, обращение Win32API можно не указывать. Таким образом, следующий пример будет работать так же, как и предыдущий.

function TestWinAPI()

{

  var res = GetCommandLine();

  Log.Message(res);

}

Назад: 11.3 Использование библиотеки распознавания текста (OCR) Содержание Дальше: 11.5 Вызов функций из .NET сборок