4

.NET 4(VS2010、C#)でDCOMサーバーを開発しています。それ自体では、これは正常に機能しています。

ここで、このDCOMサーバー用の.NETクライアントも開発する必要がありますが、TypeLibへの参照を追加できません。Visual Studioは、タイプライブラリが.NETアセンブリからエクスポートされたものであり、参照として追加できないことを通知します。

この質問への回答は、ラッパーアセンブリを生成するために使用できるはずですがTlbImp.exe、それも拒否することを示唆しています。

TlbImp:エラーTI1029:タイプライブラリ'MyWrapper'はCLRアセンブリからエクスポートされたため、CLRアセンブリとして再インポートできません。

純粋に.NETの観点からは、これにDCOMを使用することはあまり意味がないかもしれないことを理解しています。ただし、.NET以外のアプリケーションからも同じサーバーにアクセスできる必要があります。

tlbをIDLに変換し、そこからtlbを再生成しようとしましたが、これはVisualStudioをだますことはありません。

おそらく、再生成する前にIDLを少し変更することは可能ですか、それともサーバーとクライアントの両方が.NETで記述されていても、DCOMの使用を強制する方法はありますか?

4

1 に答える 1

3

DCOMを機能させることができましたが、TypeLibから実行できるかどうかはわかりません。IDLを変更すると、タイプライブラリをインポートできましたが、コンパイル中に最終的に失敗しました(ただし、これはVisual Studioでは警告として扱われます)。ファイルにさらに多くの変更を加えることはまだ可能かもしれませんが、私ははるかに簡単な解決策を使用しています。

DCOMサーバーのすべてのインターフェイス定義は別のアセンブリに移動され、.NETクライアントから直接参照されます。これにより、インポートの問題が回避されます。

次に、DCOMサーバーへのアクセスは、予想されるものと同じです。

Guid clsId = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
Type type = Type.GetTypeFromCLSID(clsId);
IMyInterface comObject = (IMyInterface)Activator.CreateInstance(type);

インターフェイスを別のアセンブリに移動する必要はありませんが、これにより共有アセンブリのサイズが最小限に抑えられます。

于 2011-02-23T08:46:27.193 に答える