从vbscript(qtp)传递win32 dll中的指针

时间:2011-06-29 21:42:02

标签: winapi pointers dll vbscript qtp

我有一个很好的老式win32 dll,其功能为

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

我需要在QTP(vbscript)中调用它并检索用于QTP应用程序的数据。这在vbscript中甚至可能吗?

我对DLL有一些控制权。它是用c ++编写的。构建COM服务器不是一种选择。重构代码以包含具有序数返回类型的访问器方法是不可能的(将是维护和scabaility噩梦)。

编辑以澄清示例...

我有......

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中。

在QTP中调用int Bar(int x, int y)很容易 我需要知道是否可以调用void Foo(int* result) 以这种方式Foo(&myResult)并传入对结果的引用。

2 个答案:

答案 0 :(得分:2)

你可以声明像Win32 API这样的外部函数但有一些限制,我相信该函数应该有extern "C"链接,并不支持所有类型。以下是如何使用QTP中的Win32 GetParent函数的示例,您可以推断如何匹配您自己的函数。

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

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

名称出现两次的原因是您可以为脚本重命名(我不记得要查找的名称是哪个,以及您将使用的名称)。

答案 1 :(得分:2)

答案是通过引用传递。

在.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)