2009-08-14 16 views
0

汎用型をCOMで直接使用することはできないようです。MSDNのInteroperating Using Generic Typesを参照してください。COM相互運用型汎用型の使用

これを達成する方法の例は誰でも得ることができますか?

+0

あなたは精巧にできますか?どのようにしてそれを行うことができるか尋ねることはできません。あなたは特定のシナリオを持っていますか? –

+0

参照先の記事には「directlty」と書かれていますので、間接的に使用する方法があると思います。 具体的な例は次のとおりです。 http://stackoverflow.com/questions/1200576/find-all-controls-on-msform-from-c – jedd

+0

さらに詳しい情報を追加するには、VB.NETでrefredcedコードが動作するような何か '間接的な'私がControlsコレクションの誤字を訂正すると、エラーが発生します。 System.MisingMemberException 'Microsoft.VisualBasic.dllで発生しました C#で実行するコードを取得するには、何かが不足しているかどうかを知る必要があります。 – jedd

答えて

4

ジェネリック型をComVisibleとして直接マークすることはできませんが、そのタイプにはComVisibleという非ジェネリックインターフェイスを実装することができます。私はこの記事が話していることを「間接的に」であると仮定し

[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(). 
    } 
} 

ので、一般的なBaker<Recipe>与えられ、あなたのような何かを導入する必要があります。私はVB.NETのControlsコレクションがこれと何をしているのかはよく分かりませんが...

+0

私はジェネリック型を使用しているとき、それは.NET Frameworkのか、COM相互運用機能である場合には(私にはわからない、これは実際にバグだと思う vb.netを使用して(説明するために):。 私はVB.NETで作業することができた場合どのようなタイプのオブジェクトを汎用のデザイナーがそれを対象としているのか、それは正しく動作しています(私はタイプを返してこれを知っています:Microsoft.VisualBasic.Information.TypeName)。私は、 {"HRESULTからの例外:0x80010105 (RPC_E_SERVERFAULT))"} – jedd

+0

あなたは私をそこに失ってしまいました、私は恐れています... –