2011-07-12 22 views
1

私はWindowsデスクバンド(Windows SDKサンプルを使用)を実装しており、通信する方法が必要です(IPCを別のアプリケーションで開始するコール) それと。Inproc COMサーバーに新しいインターフェイスを追加して実装する方法

私のCOMエクスペリエンスは非常に限られていますが、私が見たことから外挿すると、新しいCOMインターフェイスを作成し、それをdeskbandオブジェクト(IBandSite経由でアクセスできます)に実装し、QueryInterface ()を自分自身のインタフェース用に使用し、それを使ってデスクバンドに直接呼び出します。

が、私はこれを試してみましたが、非常に迅速に問題に遭遇してきました(主な理由のビーイング:私は...私は実際にほとんどの時間をやってさっぱりだが)

だから、私の質問は次のとおりです。ですこれは実用的なアプローチであり、誰かが、もしそれがあれば進歩する方法についての概要を教えてもらえます(または、私の最後のアプローチであるCOMブックを読むのに手間がかかっています。そうでない場合は、選択肢を思いついていますか?

ありがとうございます。

ルネ

+0

正確に何を望みますか?新しいCOMインターフェイスを導入し、それをCOMオブジェクトに実装させますか? – sharptooth

+0

@sharptooth:はい、これは私が考えていることです:deskbandにインターフェイスを実装し、IBandSite :: GetBandObjectから返されたオブジェクト経由で呼び出します。 – deepthought42

答えて

0

ここにあなたのパスがあります:新しいインターフェイスを.idlファイルに追加します。また、.idlファイル内にco-classを定義している場合は、co-class定義にその新しいインターフェイスをリストします。 .idlをコンパイルすると、.hファイルとCコードのIIDとC++のインタフェース定義である識別子を持つ.cファイルが得られます。

次に、COMオブジェクトのC++クラスをC++インターフェイスから継承し、そのすべてのメソッドを実装します。何らかの理由でメソッドを実装できない、または実装したくない場合は、そのメソッド実装からE_NOTIMPLを返す必要があります。

最後に非常に重要なこと:COMオブジェクトクラスでQueryInterface()の動作を変更する必要があります。 ATLを使用する場合は、COMマップにエントリを追加する必要があります。 ATLを使用しない場合は、QueryInterface()を変更してください - いくつかのCOMインターフェイスを実装する場合はQueryInterface()を実装する方法についてはthis questionを参照してください。

+0

これは私が失敗した方法です(いくつかのエラーのため、例えばrpcプロキシのDLLをコンパイルして登録しないなど)。あなたのポストを読んだ後、もう一度試してみました。助けてくれてありがとう、Rene。 – deepthought42

関連する問題