gpt4 book ai didi

windows - 当传递的对象没有实现必要的接口(interface)时返回哪个错误代码?

转载 作者:可可西里 更新时间:2023-11-01 11:15:00 26 4
gpt4 key购买 nike

在 COM 中,当我有一个我无法更改的众所周知的接口(interface)时:

interface IWellKnownInterface {
HRESULT DoStuff( IUnknown* );
};

我的 IWellKnownInterface::DoStuff() 实现只能在传递的对象实现某个特定接口(interface)时工作,我该如何处理这种情况?

HRESULT CWellKnownInterfaceImpl::DoStuff( IUnknown* param )
{
//this will QI for the specific interface
ATL::CComQIPtr<ISpecificInterface> object( param );
if( object == 0 )
//clearly the specifil interface is not supported
return E_INVALIDARG;
}
// proceed with implementation
}

如果不支持特定接口(interface),我应该返回哪个错误代码?返回 E_INVALIDARG 合适吗?

最佳答案

E_INVALIDARG 是一个不错的选择,但最重要的是确保您使用的每个返回代码的准确条件都有详细记录。

此外,您可以考虑实现 ISupportErrorInfo然后返回 rich error information通过CreateErrorInfoSetErrorInfo .如果您认为调用者可能会受益于在故障点生成自定义错误消息(其中包含所有相关上下文),这尤其有用。在您的情况下,这可能是为了具体确定哪个参数无效以及哪个接口(interface)未实现。即使这样的消息不太可能对最终用户有值(value),但如果它出现在日志文件或事件查看器中,它对开发人员来说可能是无价的。

关于windows - 当传递的对象没有实现必要的接口(interface)时返回哪个错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070980/

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