2009-08-14 54 views
0

看起來您不能直接使用泛型類型與COM:請參閱MSDN上的Interoperating Using Generic Types使用泛型類型的COM互操作

任何人都可以舉例說明如何實現這一目標嗎?

+0

你能詳細說明一下嗎?你說它不能做,然後問如何做。你有特定的場景嗎? – 2009-08-14 13:22:47

+0

被引用的文章說'directlty',所以我認爲有一些'間接'使用它們的方法。 具體的例子是這一個: http://stackoverflow.com/questions/1200576/find-all-controls-on-msform-from-c – jedd 2009-08-14 13:29:24

+0

只是添加一些信息,VB.NET必須做的'間接'作爲refrenced代碼的作品。如果我拼錯Controls集合,我得到錯誤: System.MissingMemberException'發生在Microsoft.VisualBasic.dll 因此,我需要知道什麼是缺少的東西是,讓代碼運行在C#! – jedd 2009-08-14 13:32:14

回答

4

我認爲這個想法是,你不能直接將泛型標記爲ComVisible,但你可以讓該類型實現非泛型接口ComVisible

所以,對於一個普通的Baker<Recipe>,你就需要引入類似:

[ComVisible(true)] 
public interface IBake 
{ 
    Pastry Bake(); 
} 

public class Baker<Recipe> : IBake 
{ 
    public Baker(Recipe ingredients) {...} 

    public Pastry Bake() 
    { 
     ... 
    } 
} 

[ComVisible(true)] 
public class Bakery 
{ 
    public IBake GetBaker(string recipe) 
    { 
     // somehow get recipe type from string 
     // and create and return Baker<Recipe> 
     // Client can now call IBake.Bake(). 
    } 
} 

我想這是「間接」的文章在談論。我不太清楚VB.NET的控件集合與此有什麼關係,但是...

+0

我認爲這實際上是一個錯誤(我不知道是否使用.net框架或COM Interop時使用泛型類型 解釋(使用vb.net): 如果我允許VB.NET工作(通過返回類型:Microsoft.VisualBasic.Information.TypeName)知道這是什麼類型的對象,如果我明確地將通用對象設置爲用戶窗體,我收到一個錯誤(使用任何.NET語言): {「服務器拋出一個異常。(來自HRESULT的異常:0x80010105 (RPC_E_SERVERFAULT))」} – jedd 2009-08-18 08:25:47

+0

你讓我失去了我,恐怕... – 2009-08-18 16:56:27