2009-08-14 2 views
0

Похоже, вы не можете использовать общие типы напрямую с COM: см. Interoperating Using Generic Types на MSDN.COM Interop Использование общих типов

Может ли кто-нибудь привести пример того, как это может быть достигнуто?

+0

Можете ли вы уточнить? Вы заявляете, что это невозможно, и спросите, как это можно сделать. У вас есть конкретный сценарий? –

+0

В упомянутой статье говорится «directlty», поэтому я предполагаю, что есть способ использовать их «косвенно». Конкретный пример: http://stackoverflow.com/questions/1200576/find-all-controls-on-msform-from-c – jedd

+0

Чтобы добавить дополнительную информацию, VB.NET должен выполнить «косвенное», как работает восстановленный код. Если я ошибаюсь в коллекции Controls, я получаю ошибку: System.MissingMemberException 'произошел в Microsoft.VisualBasic.dll Итак, мне нужно знать, чего недостает, чтобы получить код для запуска в C#! – jedd

ответ

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 Controls имеет отношение к этому, однако ...

+0

Я думаю, что это на самом деле ошибка (я не знаю, есть ли это с .net-каркасом или COM-взаимодействием при использовании общих типов. Чтобы объяснить (используя vb.net): Если я разрешу VB.NET работать из какого типа объекта «общий» конструктор его задает, он корректно работает, это пользовательская форма (я знаю это, возвращая тип: Microsoft.VisualBasic.Information.TypeName) .Если я явно установил общий объект как Userform, Я получаю сообщение об ошибке (на любом языке .NET): {«Сервер бросил исключение. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))»} – jedd

+0

Ты меня там потерял, я боюсь ... –

Смежные вопросы