레거시 VB6 응용 프로그램과 함께 사용하기 위해 VC++ 2010에 OCX 모듈을 작성했습니다. 그것에서, 나는 임의의 데이터의 배열 (메모리로의 포인터)을 취해야하는 하나의 함수를 가지고있다.C++ OCX 모듈에서 void *를 사용하는 함수를 지정하는 방법은 무엇입니까?
기능은 지금 빈 몸으로 구현으로 선언 :
BEGIN_DISPATCH_MAP(COcxTestCtrl, COleControl)
DISP_FUNCTION_ID(COcxTestCtrl, "Test", 1, Test, VT_EMPTY, VTS_PI1 /*??*/)
END_DISPATCH_MAP()
과 IDL 파일은 말한다 :
afx_msg void Test(void const* pSrc);
디스패치지도입니다
dispinterface _DOcxTest {
properties:
methods: [id(1)] void Test(void const* pSrc);
};
VB6의 개체 카탈로그는 함수의 형식을
으로 나열합니다.Sub Test(pSrc As Any)
Member of OcxTestLib.OcxTest
내 호출 코드는 항상 "유형 호환되지 않는 오류 13"나에게 말한다, 그러나
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
입니다. 이것은 내가 문제가있는 유일한 유형이며, 다른 모든 호출은 계획대로 이루어집니다.
나는 void const*
대신 char const*
, byte const*
, INT8 const*
을 사용하여 놀았지만이 중 아무 것도 작동하지 않았습니다. INT8 const*
을 사용할 때 VB6은이 함수를 Sub Test(pSrc As Byte)
으로 표시하지만 여전히 동일한 오류가 발생합니다.
어떻게 바이트 배열에 대한 포인터를 OCX 모듈에 전달할 수 있습니까?
void *는 자동화 호환 유형이 아닙니다. 대신 VARIANT를 사용하십시오. 또는 배열을 전달하려는 경우 SAFEARRAY. –