gpt4 book ai didi

c++ - CComBSTR::AssignBSTR() 的可能返回值是什么?

转载 作者:行者123 更新时间:2023-11-28 03:42:01 25 4
gpt4 key购买 nike

MSDN 文章只是说:

Return Value

S_OK on success, or any standard HRESULT error value.

但是,我的猜测是 E_OUTOFMEMORY 是唯一可行的错误返回,因为 NULL 是有效输入,无效的内存位置只会引发访问冲突(希望如此)。

所以。这种方法还有其他可能的 HRESULTS 吗?

注意:以下都返回S_OK:

CComBSTR bstr;
bstr.AssignBSTR(NULL);
bstr.AssignBSTR(SysAllocString(L"")); //clearly a leak, abbreviated example...
bstr.AssignBSTR(SysAllocString(L"HI"));

底线:以下是好的做法(以及为什么我经常看到其他实现?):

class foo {
public:
STDMETHOD(put_Bar)(BSTR p);
private:
CComBSTR m_bstrBar
};

STDMETHODIMP foo::put_Bar( BSTR p)
{
return m_bstrBar.AssignBSTR(p);
}

最佳答案

是的,E_OUTOFMEMORY 就是在这种非常特殊的情况下。源码在vc/atlmfc/include/atlcomcli.h可以看到

这类似于请求异常规范。不起作用,COM 方法可以返回任何 错误代码。当调用在进程外或通过网络进行编码时,也会出现奇怪的情况。

关于c++ - CComBSTR::AssignBSTR() 的可能返回值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8902347/

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