4

最近COMを学び始めました。COM では、関数の戻り値の型は HRESULT である必要があります。HRESULT、 の問題について読んだことがありますGetLastError()が、なぜ IUnknown の関数でAddRef()ありRelease()、戻り値の型はULONGですか?

AddRef()(ほとんど)常に から呼び出される答えを思いついたQueryInterface()ので、クライアントはそれを呼び出すべきではありません。の場合Release()、その戻り値はチェックされません。

私は自分の答えを - for AddRef()- と主張することができますが、クライアントがそれを呼び出さなければならない状況があるかもしれません. クライアントがその関数にアクセスできるため、クライアントがそれを呼び出さないという保証は何ですか。

for Release()- 繰り返しますが、ユーザーは戻り値の型を確認できます。

どうか明らかにしてください。

また、それは似ています->強制ではなく、COM関連の関数のHRESULT戻り値の型を持つという慣習->これが本当なら、私の脳内の混乱を止めるでしょう。

4

2 に答える 2

0

「AddRef と Release が失敗することはあり得ないので、HRESULT を返しても意味がありません。」-イゴール・タンデトニク

この質問全体と誰かを助けることを期待してすべてのコメントを読んで目が出血しているという理由だけで、これを回答として投稿しています... SOコミュニティに来て、これらのタイプの質問を閉じましょう。このがらくたをすべてふるいにかけることなく、人々を助ける方がはるかに簡単です。

于 2014-08-27T02:45:23.863 に答える