我在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会将函数列为Sub Test(pSrc As Byte)
,但我仍会遇到相同的错误。
如何将指向Byte数组的指针传递给OCX模块?
答案 0 :(得分:2)
VB中的Byte数组已经是本地SAFEARRAY,因此将其作为SAFEARRAY(或包含SAFEARRAY的VARIANT)传递给OCX。