gpt4 book ai didi

c++ - 如何在 C++ OCX 模块中指定采用 void* 的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:56 25 4
gpt4 key购买 nike

我在 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 中的字节数组已经是 native SAFEARRAY,因此将其作为 SAFEARRAY(或包含 SAFEARRAY 的 VARIANT)传递给 OCX。

关于c++ - 如何在 C++ OCX 模块中指定采用 void* 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8440199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com