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

Output array parameter in a C++ DLL function called from VB6

本文关键字:输出 数组 参数 函数 DLL VB6 调用 C++      更新时间:2023-10-16

我需要在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)

我在这里找到了一个可行的解决方案。

它是像这样在 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)