2

私は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から呼び出しました。ネット

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 が発生しました。

私の質問は、配列を入力して出力するにはどうすればよいですか?

4

1 に答える 1

0

この呼び出しで 3 番目の引数を指定しないでください。

RetCode = TestArray.COM_TEST( 2, parm )

関数 (*return_code = 0;) でこの引数を使用していますが、おそらくこれが原因で壊れているのでしょうか?

于 2012-04-20T11:33:16.303 に答える