5

これらの行に沿って何かを定義したインターフェイスがあります。

Interface foo
  {
  int someProperty {get; set;}
  Dictionary<string, object> Items;
  }

このインターフェイスを実装する具象クラスは、COM Interop に登録する必要があります。すべてがコンパイルされ、アセンブリは正常に登録されているように見えますが、(PowerShell などから) COM オブジェクトを作成しようとするとエラーが発生します。

これは、私が使用している一般的な Dictionary<> クラスに関連しているようです。だからここに質問があります:

  1. COM Interop を介してジェネリック コレクションを公開することは可能ですか?
  2. はいの場合、それはどのように行われますか?
  3. いいえの場合、回避策は何ですか?
4

2 に答える 2

6

私はGoogle検索でここにたどり着きました.ハハ、これはあなたから来ていると推測するべきでした.

私が知る限り、ジェネリックは、標準のマーシャラーを使用して COM を介してマーシャリングすることはできません。私が知っていることは、C# の ArrayList が COM の "標準" コレクションに変わり、VBScript、VB、JScript 5.x などで使用できるということです。他のいくつかの集計タイプを使用して、何が起こるかを確認してください。

于 2009-08-19T18:37:39.813 に答える
2

ジェネリックを COM から参照することはできません。VS はコンパイル時にこれに関する警告を表示する必要があります。

別の解決策として、ディクショナリを非公開にし、ディクショナリに項目を追加/削除/フェッチするメソッドを公開することが考えられます。

public interface ComVisibleFoo
{
    int SomeProperty { get; set; }

    //Dictionary<string, object> Items; // can't be COM-visible

    void AddItem(string key, object value);
    void RemoveItem(string key);
    object Item(string key);
}
于 2013-05-17T03:18:11.030 に答える