2009-08-18 5 views
4

에 사전을 <> 노출하는 방법 나는이 라인을 따라 뭔가를 정의 된 인터페이스를 가지고있다. 모든 것이 컴파일되고 어셈블리는 OK로 등록되지만 COM 객체 (예 : PowerShell)를 만들 때 오류가 발생합니다.COM Interop를

이것은 내가 사용하고있는 일반 사전 <> 클래스와 관련이있는 것 같습니다. 그래서 여기에 질문 :

  1. COM Interop를 통해 제네릭 컬렉션을 노출하는 것이 가능합니까?
  2. 예인 경우 어떻게해야합니까?
  3. 아니요. 그렇다면 해결 방법은 무엇입니까?

답변

5

나는 Google 검색을 통해 여기에서 끝났으며, 하하, 나는 이것이 당신에게서 왔음을 짐작 했어야했다.

제네릭은 COM을 통해 표준 marshallers와 마샬링 할 수 없습니다. 내가 아는 것은 C#의 ArrayList가 VBScript, VB, JScript 5.x 등에서 사용할 수있는 COM의 "표준"컬렉션으로 바뀌는 것입니다. 그러나 공통 목표를 향해 작업하고 있으므로, 다른 집계 유형과 어떤 일이 발생하는지 확인하십시오.

2

Generics는 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); 
} 
관련 문제