- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近开始学习COM。在 COM 中,函数的返回类型应该是 HRESULT。已阅读 HRESULT
, GetLastError()
的问题,但是为什么,IUnknown 的函数,AddRef()
和 Release()
有返回类型 ULONG
?
我想出的答案是AddRef()
(几乎)总是从 QueryInterface()
调用,并且客户端不应该调用它。而对于 Release()
,它的返回值永远不会被检查。
虽然我可以争论我自己的答案 -
为 AddRef()
- 客户可能有他不得不打电话的情况。并且由于客户端可以访问该函数,因此客户端不会调用它的保证是什么。
为 Release()
- 同样,用户可以检查其返回类型,因为他可以
请说清楚。
也是这样 --> 它的约定是让 HRESULT 返回 COM 相关函数的类型,而不是强制 --> 如果这是真的,它将停止我大脑中的困惑。
最佳答案
"AddRef and Release can't ever fail, so there's no point in having them return HRESULT." -Igor Tandetnik
关于interface - 为什么 AddRef() 和 Release() 的返回类型不是 HRESULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274267/
我一直对函数签名使用以下规则,这些函数根据是否执行 AddRef 返回引用计数对象,但我也想向我的同事解释一下......所以我的问题是,下面描述的规则是一个被广泛遵循的规则?我正在寻找(例如)提倡这
我正在调试 C++/COM 应用程序,查看我们如何添加引用和释放 COM 对象。当 AddRef 返回 0 时,我遇到了奇怪的情况。这是我获取返回值的方式: ULONG TraceAddRef(LPU
这是一个示例片段: _variant_t var; var.vt = VT_UNKNOWN; var.punkVal = unknownInterfaceSmartPointer; unknownIn
我正在尝试实现 IShellBrowser。一种方法是: HRESULT STDMETHODCALLTYPE IShellBrowser::QueryActiveShellView(/* [out]
下面是一个将资源图像从可执行文件加载到 ID2D1Bitmap 指针的函数。 我的问题是,我是否需要在 ID2D1Bitmap** ppBitmap 函数参数上调用 AddRef()? 例如在函数的末
在 C++ 中实现 IUnknown::QueryInterface() 时,有几个关于指针操作的注意事项。例如,当类实现多个接口(interface)时(多重继承)explicit upcasts
我发现了一些 QueryInterface() 的实现模式: // Inside some COM object implementation ... virtual HRESULT __stdcal
CoCreateInstance 是在我正在创建的接口(interface)上自动调用 AddRef 还是应该在之后手动调用它? 最佳答案 与 COM 的契约(Contract)是任何时候你从这样的函
最近开始学习COM。在 COM 中,函数的返回类型应该是 HRESULT。已阅读 HRESULT , GetLastError() 的问题,但是为什么,IUnknown 的函数,AddRef()和 R
我一直在努力思考 Windows 中的 shell 扩展。需要实现的一些函数是 addref() 和 release()。它说,它会跟踪对象引用并在不使用时释放它们。 简单解释一下,它实际跟踪的是什么
我曾经听说可以将 Boost shared_ptr 或 intrusive_ptr 引用添加和释放函数映射到我自己的 add 和 release 实现发布引用函数。 这真的可能吗?如果是,任何人都可以
我正在编写 Direct3D 10 应用程序并希望确保没有 COM 对象泄漏。 是的,我用 CComPtr 包装了接口(interface),但我还是想要一个泄漏检查,出于同样的原因,我仍然使用普通的
我知道在 COM 对象的 AddRef 和 Release 方法内部使用互锁 API 来递增/递减线程安全的引用计数。但我想在这里理解的是,是否足够使用 Interlock API,或者我们还需要某种
我是一名优秀的程序员,十分优秀!