C++ 如何指定在C+中使用void*的函数+;OCX模块?

C++ 如何指定在C+中使用void*的函数+;OCX模块?,c++,vb6,activex,bytearray,ocx,C++,Vb6,Activex,Bytearray,Ocx,我已经在VC++2010中编写了一个OCX模块,用于遗留的VB6应用程序。在其中,我有一个函数,它应该获取任意数据数组(内存中的指针) 该函数现在以空体形式实现,并声明为: afx_msg void Test(void const* pSrc); 调度图为: BEGIN_DISPATCH_MAP(COcxTestCtrl, COleControl) DISP_FUNCTION_ID(COcxTestCtrl, "Test", 1, Test, VT_EMPTY, VTS_PI1 /*?

我已经在VC++2010中编写了一个OCX模块,用于遗留的VB6应用程序。在其中,我有一个函数,它应该获取任意数据数组(内存中的指针)

该函数现在以空体形式实现,并声明为:

afx_msg void Test(void const* pSrc);
调度图为:

BEGIN_DISPATCH_MAP(COcxTestCtrl, COleControl)
    DISP_FUNCTION_ID(COcxTestCtrl, "Test", 1, Test, VT_EMPTY, VTS_PI1 /*??*/)
END_DISPATCH_MAP()
IDL文件说:

dispinterface _DOcxTest {
    properties:
    methods:     [id(1)] void Test(void const* pSrc);
};
VB6的对象目录将函数的类型列为

Sub Test(pSrc As Any)
Member of OcxTestLib.OcxTest
我的电话号码是

Private Sub TestButton_Click()
    Dim text() As Byte
    Dim buflen As Long
    buflen = 2 ^ 16
    text = String(buflen, "Z")
    OcxTest1.Test (text(0))
End Sub
然而,它总是告诉我“错误13:类型不兼容”。这是我唯一遇到问题的类型,所有其他呼叫都按计划进行

我曾经尝试过使用
char-const*
byte-const*
INT8-const*
代替
void-const*
,但这些都不起作用。当我使用
INT8 const*
时,VB6将函数列为
子测试(pSrc作为字节)
,但我仍然得到相同的错误


如何将指向字节数组的指针传递给OCX模块?

VB中的字节数组已经是本机SAFEARRAY,因此将其作为SAFEARRAY(或包含SAFEARRAY的变体)传递给OCX。

void*不是与自动化兼容的类型。改用VARIANT。如果要传递数组,请使用SAFEARRAY。作为
变量传递,包含
SAFEARRAY
已工作:
静态转换((*(pSrc->pparray))->pvData)
:)