从VB6调用的C ++ DLL函数中的输出数组参数

时间:2017-10-05 18:54:14

标签: c++ arrays dll vb6

我需要一个数组作为C ++函数的输出参数,然后从VB6调用。我正在使用VS 2015和C ++进行DLL项目。

我找不到一种方法来创建数组并将其返回到C ++代码中(这将是最好的解决方案),所以我试图在VB6代码中创建一个足够大的数组并将其作为参数传递,然后在C ++代码中更改它并再次使用VB6中的结果值。下面是一个带有字节数组的例子,但我的最终函数需要是一个结构数组,所以在字节数组的位置使用字符串的解决方案不起作用。

C ++代码(调用本身有效):

__declspec(dllexport) void  __stdcall Test(
    char* data, int* len)
{
    *len = 3;
    data[0] = 1;
    data[1] = 2;
    data[2] = 3;
}

VB6代码:代码工作,长度参数按预期更改但数据数组不会更改,它仍为零:

Private Declare Sub Test Lib "MyDll.dll" (ByRef data() As Byte, length As Long)

Dim data(10) As Byte
Dim length As Long
Call Test(data, length)

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案here

这是在VB6中声明和调用函数:

Private Declare Sub Test Lib "MyDll.dll" (ByRef data As Byte, length As Long)

Dim data(10) As Byte
Dim length As Long
Call Test(data(LBound(data)), length)