1

一部のC#タイプをCOM経由でC++クライアントに公開することを検討しています。プロジェクトの存続期間中にどのような問題が発生すると予想できますか?たとえば、バージョン管理はどのように管理されますか?

バージョン管理では、これを読むと、公開する型を装飾し、明示的なインターフェイスを使用する必要があるように思わます[ClassInterface(ClassInterfaceType.None)]。そうすれば、COMクライアントに公開されるインターフェイスを完全に制御できると思います。

前もって感謝します。

4

3 に答える 3

2

C++ クライアントを使用しているため、アーリー バインディングには必ず明示的なインターフェイスを使用する必要があります。ディスパッチ インターフェイスは、VBS などのスクリプト クライアントを使用する場合に便利ですが、C++ クライアントではほとんど役に立ちません。

インターフェイスをバージョン管理する唯一の方法は、新しいインターフェイスを作成することです (元のインターフェイスから継承する可能性があります)。明示的なインターフェイスを使用すると、このプロセスを完全に制御できます。

これは、COM 経由で公開する予定のすべてのクラスのインターフェイスを作成する必要があることを意味します。すべてのインターフェイスとクラスを ComVisible 属性と Guid 属性でマークすることを忘れないでください。また、すべてのクラスにはデフォルトのコンストラクターが必要です。

于 2009-07-01T09:17:01.117 に答える
1

バイナリ互換性を維持し、必要な場合にのみクライアントを再構築するには、GUID 属性 ( this を含む)について読む必要があります。

また、レジストリ汚染の軽減に役立つComVisible 属性にも興味があるかもしれません。

于 2009-07-01T09:17:10.727 に答える
1

COM インターフェイスを完全に制御するには、MIDL で定義します。C++ プロジェクトでこれらのインターフェイスを使用してタイプ ライブラリをビルドし、タイプ ライブラリを C# にインポートしてインターフェイスを実装します。

このアプローチは、マーシャリングが簡単ではない複雑なインターフェイスで役立ちます。

バージョンは COM スタイルで行い、GUID を変更し、新しいインターフェイスまたは継承インターフェイスを追加する必要があります。

于 2009-07-01T09:58:03.733 に答える