最近COMを学び始めました。COM では、関数の戻り値の型は HRESULT である必要があります。HRESULT
、 の問題について読んだことがありますGetLastError()
が、なぜ IUnknown の関数でAddRef()
ありRelease()
、戻り値の型はULONG
ですか?
AddRef()
(ほとんど)常に から呼び出される答えを思いついたQueryInterface()
ので、クライアントはそれを呼び出すべきではありません。の場合Release()
、その戻り値はチェックされません。
私は自分の答えを - for AddRef()
- と主張することができますが、クライアントがそれを呼び出さなければならない状況があるかもしれません. クライアントがその関数にアクセスできるため、クライアントがそれを呼び出さないという保証は何ですか。
for Release()
- 繰り返しますが、ユーザーは戻り値の型を確認できます。
どうか明らかにしてください。
また、それは似ています->強制ではなく、COM関連の関数のHRESULT戻り値の型を持つという慣習->これが本当なら、私の脳内の混乱を止めるでしょう。