Передать указатель в win32 dll из vbscript (qtp) - PullRequest
3 голосов
/ 30 июня 2011

У меня есть старый добрый win32 dll с функциями вида

void Foo1(int* value)
void Foo2(char* string)
void Foo3(MyType* data)
//ect...

Мне нужно вызвать это в QTP (vbscript) и получить данные для использования в приложении QTP. Это возможно даже в VBScript?

У меня есть некоторый контроль над DLL. Написано на с ++. Создание COM-сервера не вариант. Рефакторинг кода для включения методов доступа с порядковыми типами возврата совершенно невозможен (это был бы кошмар обслуживания и гибкости).

Редактирование для уточнения примера ...

У меня есть ...

void Add(int x, int y, int* result)

... Мне нужно сделать QTP-эквивалент этого ...

int myX = 2;
int myY = 5;
int myResult = -1;
Add(myX, myY, &myResult);
//myResult should now be 7

... но в QTP.

Звонить int Bar(int x, int y) в QTP легко.
Мне нужно знать, можно ли позвонить в void Foo(int* result)
таким образом Foo(&myResult) и передайте ссылку на результат.

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Ответ должен быть передан по ссылке.

В файле .h объявите функцию:

extern "C" __declspec(dllexport) int HelloWorld(int &);

В файле .cpp определите функцию:

int HelloWorld(int& i)
{
    i = 10;
    return 55 + i;
}

QTP код:

Extern.Declare micInteger, "HelloWorld", "C:\test.dll", "HelloWorld", micInteger+micByRef 
myNumber = 5
Extern.HelloWorld(myNumber)
MsgBox(myNumber)
2 голосов
/ 30 июня 2011

Вы можете объявить внешние функции, такие как Win32 API, но есть некоторые ограничения, я считаю, что функция должна иметь extern "C" связь, и поддерживаются не все типы.Вот пример того, как использовать функцию Win32 GetParent из QTP, вы можете экстраполировать, как соответствовать вашей собственной функции.

' Declare
Extern.Declare micHwnd, "GetParent", "user32.dll", "GetParent", micHwnd
' explanation:  retVal     name        sourceDll     name        parameter

' Usage
hwnd = Extern.GetParent(Browser(“xxx”).GetROProperty("hwnd"))

Причина, по которой имя появляется дважды, заключается в том, что вы можете переименовать егодля вашего сценария (я не помню, какое имя искать и какое имя вы будете использовать).

...