私はCOMの凝集を学ぶときCInnerclass::QueryInterface
がINondelegationUnknown
に属していないので、なぜpUnkInner
がQueryInterface
を呼び出すことができ、例えば、pUnkInner->QueryInterface
ながら、私は、CInnerclass::INondelegationUnknown
インターフェイスにそのCOuterclass::pUnkInner
ポイントを知っています。なぜpUnkInnerはCOMの集計でQueryInterfaceを呼び出せるのですか?
0
A
答えて
0
INondelegationUnknown
が何であるかわかりません。これはCOMの一部ではなく、おそらく使用しているフレームワーク固有のものです。
しかし、重要な部分は、いずれかの方法で、集約の内部オブジェクトは、IUnknown
の2つの異なる実装を提供する必要があります。 1つは委任の実装であり、アグリゲーション関係が最初に確立されたときに、CoCreateInstance
に外部から提供されたIUnknown
ポインタへのすべての呼び出しを転送します。インナーによって公開されるすべてのインターフェイスは、このように3つのIUnknown
メソッドを実装する必要があります。外側のクライアントは、外部のクライアントにそのインターフェイスを渡します。外部に委任することによって、単一のシームレスなオブジェクトの錯覚が維持されます。
IUnknown
実装では、参照カウントを管理し、内部オブジェクト(通常のCOMオブジェクトのような)によって実装されるインターフェイスを公開します。これは非委任実装です。外部クラスが内部管理に使用します。それは決して外部に露出されません。外側は、内部で実装されたインターフェイスを取得してからクライアントに渡すために、そして内部を最終的に解放するために、この非委譲ポインターを独自のQueryInterface
実装で使用します。
関連する問題
- 1. COMメソッド呼び出しがRPC_S_INTERNAL_ERRORを返すのはなぜですか?
- 2. なぜこのメソッドを呼び出せないのですか?
- 3. なぜUIComponent.setValueExpression()を呼び出せないのですか?
- 4. 別のCOM DLLへの呼び出しでVB.NET呼び出しCOM DLLがエラーになる
- 5. オーバーロードメソッドでdefine_methodでsuperを呼び出せないのはなぜですか?
- 6. COMインターフェイスが同じ呼び出しメソッドに対して異なる値を返すのはなぜですか?
- 7. --targetと--editableでpipを呼び出せないのはなぜですか?
- 8. オブジェクトでクラスメソッドを呼び出せないのはなぜですか?
- 9. rspec let(:variables)をsymbolで呼び出せないのはなぜですか?
- 10. SKSceneで添え字を呼び出せないのはなぜですか?
- 11. Android Life Cycles - onPause(){}でonResume()を呼び出せないのはなぜですか?
- 12. UnsupportedOperationException - java.sql.DateでtoInstant()を呼び出せないのはなぜですか?
- 13. インターフェイスでToString()を呼び出せないのはなぜですか?
- 14. Routine :: WrapHandleでメタメソッドを呼び出せないのはなぜですか?
- 15. デストラクタでdispose(false)を呼び出すのはなぜですか?
- 16. RailsコンソールからActionViewメソッドを呼び出せないのはなぜですか?
- 17. Pythonクラスからメソッドを呼び出せないのはなぜですか?
- 18. なぜunregisterReceiver()はonServiceDisconnectedを呼び出さないのですか?
- 19. なぜ私は基本クラスのコンストラクタを呼び出せないのですか?
- 20. ArrayListのCollections.sort()を呼び出せないのはなぜですか?<T>?
- 21. com +コンポーネントを呼び出す方法は?
- 22. glMatrixModeを呼び出すたびにglLoadIdentityを呼び出す必要があるのはなぜですか?
- 23. なぜASP.NETのSystem.Diagnostics.ProcessでPerlスクリプトを呼び出せないのですか?
- 24. なぜngForの中でメンバー関数を呼び出せないのですか?
- 25. PrintStream.close()はなぜ2回呼び出されるのですか?
- 26. デストラクタが呼び出されるのはなぜですか?
- 27. SQLCLR - COM呼び出しをラップする
- 28. パブリックメソッド内にプライベートメソッドを呼び出せないのはなぜですか?
- 29. Ruby:putsがto_aryを呼び出すのはなぜですか?
- 30. なぜクロスgccはネイティブ 'as'を呼び出すのですか?
*常にインターフェイスポインタでQueryInterfaceを呼び出すことができます。あなたが忘れたかもしれない細部は、すべてのCOMインターフェイスのように、INUnknownGenerationUnknownがIUnknownから派生しているということです。したがって、3つのIUnknownメソッドを継承します。私たちはここからそれを見ることはできませんが、それは通常の方法です。 –
どこからCOMを学習していますか? – acelent