gpt4 book ai didi

com - 如何使用 BSTR*

转载 作者:行者123 更新时间:2023-12-04 13:29:03 24 4
gpt4 key购买 nike

我有一个 out C++ COM dll 中接口(interface)的 BSTR* 值。我将此返回给 C# .Net 客户端。在我的 C++ 函数中,我必须根据差异条件分配不同的值。

例如:

If my function is fun(BSTR* outval)
{
// I have to assign a default value to it such as:
*outval = SysAllocSTring(L"N");

Then I will check for some DB conditions
{
// And I have to allocate it according to that.
// Do I need to again calling SysAllocString?
eq.*outval = SySAllocString(DBVlaue);
}
}

如果我两次调用 SysAllocSTring 到同一个 BSTR 会发生什么?处理这个问题的最佳方法是什么?

最佳答案

你必须照顾所有BSTR s 除了您实际作为“out”参数传递的那个。 BSTR你传递出去不需要被释放 - 调用者负责释放它,你的代码负责所有其他 BSTR s 它本可以分配的。

如果你真的需要那些临时的BSTR s 你应该使用像 ATL::CComBSTR 这样的包装类或 _bstr_t对于那些临时的BSTR s(但不适用于您传出的那个)。我想在您描述的情况下,您最好只重写您的代码,这样您就不需要更多 BSTR在任何控制路径上创建。

这是一些伪代码:

 HRESULT YourFunction( BSTR* result )
{
if( result == 0 ) {
return E_POINTER;
}
int internalStateValue = getState();
if( internalStateValue > 0 ) { // first case
*result = SysAllocString( "positive" );
} else if( internalStateValue < 0 ) { //second case
*result = SysAllocString( "negative" );
} else { //default case
*result = SysAllocString( "zero" );
}
return S_OK;
}

关于com - 如何使用 BSTR*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148068/

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