8

COM で表示できるようにしようとしている次のインターフェイスがあります。タイプ ライブラリを生成しようとすると、実装クラスがジェネリック クラスから派生するという事実が気に入りません。

ジェネリック クラスを COM 実装クラスとして使用することはできますか? (非ジェネリック ラッパーを作成して COM にエクスポートできることはわかっていますが、これにより、なくしたい別のレイヤーが追加されます。)

[ComVisible(true)]
public interface IMyClass
{
   ...
}

[ComVisible(true), ComDefaultInterface(typeof(IMyClass))]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : BaseClass<IMyClass>, IMyClass
{
   ...
} 

エラーメッセージ:

警告: タイプ ライブラリ エクスポーターは、派生する型を検出しました
ジェネリッククラスからのもので、としてマークされていません
[ClassInterface(ClassInterfaceType.None)]. クラスインターフェイスはできません
そのようなタイプにさらされます。タイプを次のようにマークすることを検討してください
[ClassInterface(ClassInterfaceType.None)]
明示的なインターフェースをデフォルトのインターフェースとして公開する
ComDefaultInterface 属性を使用する COM。
4

1 に答える 1

6

ジェネリック型およびジェネリック型から派生した型はエクスポートできません。タイプに設定ComVisible(false)しますMyClass。非ジェネリッククラスの実装を作成するか、インターフェイスのみを使用する必要があります。

于 2008-09-25T17:41:52.957 に答える