5

我有一个按照以下方式定义的接口:

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

实现该接口的具体类需要为 COM Interop 注册。一切都编译并且程序集似乎注册正常,但是当尝试创建 COM 对象(例如从 PowerShell)时,我得到一个错误。

这似乎与我正在使用的通用 Dictionary<> 类有关。所以这是一个问题:

  1. 甚至可以通过 COM 互操作公开通用集合吗?
  2. 如果是,那么它是如何完成的?
  3. 如果没有,那么解决方法是什么?
4

2 回答 2

6

我最终通过谷歌搜索来到这里,哈哈,我应该猜到这会来自你。

据我所知,泛型不能通过标准编组器通过 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 回答