如何在c++ OCX模块中指定一个接受void*参数的函数
How to specify a function that takes a void* in C++ OCX module?
我在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。
相关文章:
- 如何将指针从一个void函数传递到另一个C++
- 如何将一个 void 函数传递给另一个 void 函数?
- 定义一个 void f(void) 函数,但使用来自同一范围的变量?
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 将 void 指针分配给另一个 void 指针
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 如何在堆上分配一个void*阵列
- 虚幻c++使用LineTrace从Actor调用一个void
- 如何创建一个 void 数组,其大小将由用户从命令行输入指定
- 复制值从一个void **到C 复制构造函数中的另一个void **
- 返回一个void数组*
- static_cast一个void*指针可以吗
- 如何在C++中使一个void函数与另一个void功能协同工作
- 有没有任何情况下,变量可以被赋予一个void函数
- 为什么我们不能声明一个 void 类型的变量?
- 我在我的程序中添加了一个void函数,它不接受任何参数,现在我的程序在运行时只返回一个空白终端
- 如何将地址对齐到一个void指针
- 使用malloc和一个void指针复制一个临时结构
- 为什么这个快速排序的实现从一个void函数返回?
- 将不同的数据类型组合成一个void类型