如何在c++ OCX模块中指定一个接受void*参数的函数

How to specify a function that takes a void* in C++ OCX module?

本文关键字:一个 void 函数 参数 OCX c++ 模块      更新时间:2023-10-16

我在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),但我仍然得到相同的错误。

我怎么能传递一个指针到字节数组的OCX模块?

VB中的Byte数组已经是一个本机SAFEARRAY,所以将它作为SAFEARRAY(或包含SAFEARRAY的变体)传递给OCX。