如何将SafeArray从C ++(ATL)返回到VB.NET

时间:2012-04-20 09:27:46

标签: c++ vb.net atl

我创建了一个ATL项目,我得到了一个像

这样的函数

idl文件:

[id(1)] HRESULT COM_TEST( [in] int parm_count, [in, out] SAFEARRAY(PARM) *parm, [out, retval] short *return_code )

cpp文件:

STDMETHODIMP CTEST::COM_TEST( int parm_count, SAFEARRAY **parm, short *return_code
{
    *return_code = 0;
    for( long i = 0 ; i < parmc ; i++ )
    {
        PARM value;
        value.data = _bstr_t("This is a ACK" );  //data is BSTR type 
        SafeArrayPutElement( *parm, &i, &value );
    }

return S_OK;
}

然后我从VB调用它。 NET

vb文件:

Dim RetCode As Short
Dim TestArray As ATL_TESTLib.ITEST
Dim parm() As ATL_TESTLib.PARM
TestArray = New ATL_TESTLib.TEST

ReDim parm(1)
parm(0).data = "This is request A"
parm(1).data = "This is request B"
RetCode = TestArray.COM_TEST( 2, parm )

但是,我遇到了AccessViolationException。

我的问题是如何输入数组并将其输出?

1 个答案:

答案 0 :(得分:0)

你不应该在这次电话会议中提供第三个参数吗?

RetCode = TestArray.COM_TEST( 2, parm )

你在你的函数中使用这个参数(* return_code = 0;),也许这就是为什么它会破坏?