Я написал модуль OCX в VC ++ 2010, который будет использоваться с устаревшим приложением 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?