从vbscript(qtp)向win32 dll传递指针

3

我有一个老式的win32 dll,其中包含形如以下函数:

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

我需要在QTP(vbscript)中调用它并检索数据以在QTP应用程序中使用。在vbscript中是否可能实现这一点?
我对DLL有一定的控制权,它是用c++编写的。构建COM服务器不是一个选择。重构代码以包括具有序数返回类型的访问器方法完全不可能(将成为维护和可扩展性的噩梦)。
编辑以澄清示例...
我有...
void Add(int x, int y, int* result)
...我需要做QTP等效于此的操作...
int myX = 2; int myY = 5; int myResult = -1; Add(myX, myY, &myResult); //现在myResult应该是7
...但在QTP中。
在QTP中调用int Bar(int x, int y)很容易。
我想知道是否可以这样调用void Foo(int* result)Foo(&myResult)并传递一个结果的引用。

把这个放在这里... 昨晚有另一个回答我的问题,但现在不见了。?? 你能在SO上撤回答案吗?它还在那里,我错过了什么明显的东西吗? - dFlat
2个回答

2
答案是通过引用传递。
在.h文件中声明函数:
``` void functionName(int& param); ```
在.cpp文件中实现函数:
``` void functionName(int& param) { // 函数体 } ```
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

您可以像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"))

名称出现两次的原因是为了让您在脚本中重新命名它(我不记得哪个是要查找的名称,哪个是您将使用的名称)。


我需要调用Foo(int* x)函数并修改在QTP中声明的x变量。这是否可行? - dFlat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接