簡體   English   中英

如何將一個DIctionary <>暴露給COM Interop

[英]How To Expose a DIctionary<> to COM Interop

我有一個接口,沿着這些方向定義:

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

實現此接口的具體類需要為COM Interop注冊。 一切都編譯好,程序集似乎注冊正常,但是當試圖創建COM對象時(例如從PowerShell)我得到一個錯誤。

這似乎與我正在使用的通用Dictionary <>類有關。 所以這是一個問題:

  1. 甚至可以通過COM Interop公開泛型集合嗎?
  2. 如果是,那怎么辦?
  3. 如果不是,那么解決方法是什么?

我最后通過谷歌搜索到了這里,哈哈,我應該猜到這會來自你。

據我所知,通用COM無法通過COM與標准編組進行編組。 我所知道的是C#中的ArrayList變成了COM中的“標准”集合,可以被VBScript,VB,JScript 5.x等使用。但是因為我們正朝着共同的目標努力,所以我要去玩與其他一些聚合類型,看看會發生什么。

泛型不能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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM