レガシー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を指定します。 –