C++ 如何指定在C+中使用void*的函数+;OCX模块?
我已经在VC++2010中编写了一个OCX模块,用于遗留的VB6应用程序。在其中,我有一个函数,它应该获取任意数据数组(内存中的指针) 该函数现在以空体形式实现,并声明为: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 /*?
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)
:)