gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:57 24 4
gpt4 key购买 nike

我创建了一个 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。

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

最佳答案

你不应该在这个调用中提供第三个参数吗?

RetCode = TestArray.COM_TEST( 2, parm )

您正在函数中使用此参数 (*return_code = 0;),也许这就是它中断的原因?

关于c++ - 如何将 SafeArray 从 C++ (ATL) 返回到 VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10243541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com