0

抽象メソッドを使用してインターフェイスを継承する必要があります。VB/c# では、インターフェイスからメソッドをオーバーライドするだけで、IUnknown または IDispatch メソッドをコーディングする必要はありません。

しかし、C ++では、クラスでインターフェイスを継承し、インターフェイスでメソッドをオーバーライドした後、派生クラスをインスタンス化しようとすると、次のエラーが発生します

error C2259: 'Imyinterface' : cannot instantiate abstract class
1>          due to following members:



'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
'ULONG IUnknown::AddRef(void)' : is abstract
 'ULONG IUnknown::Release(void)' : is abstract 

そのため、IUnknown および IDispatch メソッド (addref、Release、QueryInterface、invoke、gettypeinfo など) をオーバーライド/定義する必要があります。

それらは標準関数のように見えるので、どこでコード/定義egATLまたはタイプライブラリを取得できますか? または上記の方法のコード/例を取得できる参照

4

2 に答える 2

0

QueryInterface: 渡された GUID によって識別されるインターフェイスに到達できる場合は、インターフェイスへのポインターをvoid **パラメーターに入れます。それ以外の場合は に設定void **NULLます。適切な を返しますHRESULT

AddRef処置: インタフェースの参照カウントを増やしてください。

Release処置: インタフェースの参照カウントを減らしてください。

これを掘り下げる前に、COM に関する優れた本を入手することをお勧めします。Dale Rogerson による Inside Com (Microsoft Programming Series)の中古コピーは安価です。それには例があります。Amazon のレビューを読んで、この本を購入するかどうかを判断してください。

于 2012-05-26T07:22:13.957 に答える
-1

これらのメソッドをオーバーライドし、(派生クラスで) それらの定義を提供し、基本クラスで純粋仮想として宣言されたすべての関数を提供する必要があります。
そうしない限り、派生クラスは抽象クラスとしても機能し、そのオブジェクトを作成することはできません。

2 番目の Q については、いいえ、これらのメソッドの標準的な実装が何をすべきかについて、本当に良い考えがありません。

于 2012-05-26T06:50:36.503 に答える