[英]How To Expose a DIctionary<> to COM Interop
我有一個接口,沿着這些方向定義:
Interface foo
{
int someProperty {get; set;}
Dictionary<string, object> Items;
}
實現此接口的具體類需要為COM Interop注冊。 一切都編譯好,程序集似乎注冊正常,但是當試圖創建COM對象時(例如從PowerShell)我得到一個錯誤。
這似乎與我正在使用的通用Dictionary <>類有關。 所以這是一個問題:
我最后通過谷歌搜索到了這里,哈哈,我應該猜到這會來自你。
據我所知,通用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.