gpt4 book ai didi

windows - 是否值得在 QueryInterface() 实现中检查空指针?

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

IUnknown::QueryInterface() 被传递了一个 void** 参数,表示放置检索到的接口(interface)的地址。

STDMETHOD QueryInterface(/* [in] */ REFIID riid, /* [iid_is][out] */ void** ppvObject)

QueryInterface() 的实现应该检查这个指针是否为空(然后立即返回 E_POINTER)还是只写在那里?

我看过很多与 COM 相关的代码,几乎所有地方都没有执行任何检查。假设有人当然可以传递空指针作为这个参数,但真的需要这样的检查吗?

最佳答案

您(调用者)不需要检查指针是否为 NULL

但是,您应该检查返回的 HRESULT。如果输出指针为 NULL,该方法将返回 E_POINTER;如果接口(interface)不受支持,则返回 E_NOINTERFACE


被调用者应检查指针是否为 NULL,如果为 NULL,则返回 E_POINTER:

MSDN: Return Value:

This method returns S_OK if the interface is supported, and E_NOINTERFACE otherwise. If ppvObject is NULL, this method returns E_POINTER.

关于windows - 是否值得在 QueryInterface() 实现中检查空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1426393/

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