【发布时间】:2018-03-17 12:01:05
【问题描述】:
我需要一个数组作为 C++ 函数中的输出参数,然后从 VB6 调用该数组。我在 DLL 项目中使用 VS 2015 和 C++。
我找不到创建数组并在 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)
【问题讨论】:
-
它解释了“创建数组并在 C++ 代码中返回它(这将是最好的解决方案)”所需的所有
SAFEARRAY*业务。参数类型保持不变,唯一的区别是您还可以在 C++ 端调用SafeArrayCreate。