7

COM プログラミングは初めてで、Visual Studio 2010 から基本的なネイティブ COM サーバーとクライアントのペアを作成しています。クライアント プロジェクトとサーバー プロジェクトの両方が同じソリューション内にあります。生成されたクライアント スタブとヘッダー ファイルをクライアント プロジェクトに含める最も適切な方法を知りたいです。サーバー プロジェクトに MIDL を作成しました。プロジェクトをコンパイルすると、プロジェクト ソース ディレクトリに _h.h、_i.c、および _p.c ファイルが生成されます。

  • クライアント プロジェクトで両方の .c ファイルをコンパイルする必要がありますか?
  • サーバー プロジェクトのソース ディレクトリからクライアント プロジェクトにリンクされたファイルとして追加することにより、クライアント プロジェクトでこれらをコンパイルする最良の方法はありますか?
  • MIDL を変更したときに _h.h、_i.c、および _p.c ファイルが古くなっていることを Visual Studio が認識できるようにする方法はありますか。ミドル?
  • .h ファイルを配置するのに最適な場所はどこですか? サーバー プロジェクトの stdafx.h ファイルに配置できますか? その場合、サーバー プロジェクトのソース ディレクトリをクライアント プロジェクトのヘッダー インクルード ディレクトリに追加するのは適切ですか?
  • クライアント プロジェクトには、サーバー プロジェクトへの "参照" (Visual Studio 参照の意味で) が必要ですか?

さらに、この登録を無料にしたいと思います。この場合、クライアントとサーバーのマニフェストを用意する以外に、他に何かする必要がありますか?

..

編集

ここで MSDN の記事を見る: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366830(v=vs.85).aspx、必要な場合のみ生成されたファイルのようです。インプロセスでの reg-free アクティベーションをサポートするには、_i.c をコンパイルし、クライアント プログラムに _h.h ファイルを含めるだけです。

dlldata.c と _p.c は、リモート コンピューターでの登録をサポートするプロキシ DLL の作成に使用されているようです (リモート コンピューターによるアクティブ化のため? またはローカル コンピューターのアウト オブ プロセス? ローカル コンピューターに必要な場合は、アウトCOM サーバーの DLL が登録されているのに、なぜそれが必要なのですか? COM サーバー DLL はプロキシ DLL とは異なりますよね?)

どうもありがとう、

--マット

4

1 に答える 1

7

生成された _p.c と dlldata.c を別のプロジェクトにコンパイルして、プロキシ/スタブ DLL をビルドする必要があります。アパートメントまたはプロセス間で呼び出しをマーシャリングする場合にのみ、常に必要というわけではありません。

生成された _i.c ファイルは、GUID 値を提供します。サーバーとプロキシ/スタブにコンパイルします。クライアントにコンパイルしても問題ありませんが、__uuidof キーワードを使用するのが最も簡単です。

生成された _i.h ファイルには、インターフェイスとコクラスの宣言が含まれています。サーバーとクライアントに #include する必要があります。

.idl を変更すると、Midl.exe によってこれらのファイルが自動的に再生成されます。これにより、クライアント、サーバー、およびプロキシ/スタブが再構築されます。

stdafx.h は問題ありません。はい、インクルード ディレクトリにあります。

「参照」ではありません。クライアントとサーバーにはリンクの依存関係がありません。

reg-free com のマニフェストを作成し、クライアントに埋め込む必要があります。

于 2012-04-17T06:42:38.003 に答える