Похоже, вы не можете использовать общие типы напрямую с COM: см. Interoperating Using Generic Types на MSDN.COM Interop Использование общих типов
Может ли кто-нибудь привести пример того, как это может быть достигнуто?
Похоже, вы не можете использовать общие типы напрямую с COM: см. Interoperating Using Generic Types на MSDN.COM Interop Использование общих типов
Может ли кто-нибудь привести пример того, как это может быть достигнуто?
Я думаю, что идея заключается в том, что вы не можете указывать общий тип как 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 имеет отношение к этому, однако ...
Я думаю, что это на самом деле ошибка (я не знаю, есть ли это с .net-каркасом или COM-взаимодействием при использовании общих типов. Чтобы объяснить (используя vb.net): Если я разрешу VB.NET работать из какого типа объекта «общий» конструктор его задает, он корректно работает, это пользовательская форма (я знаю это, возвращая тип: Microsoft.VisualBasic.Information.TypeName) .Если я явно установил общий объект как Userform, Я получаю сообщение об ошибке (на любом языке .NET): {«Сервер бросил исключение. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))»} – jedd
Ты меня там потерял, я боюсь ... –
Можете ли вы уточнить? Вы заявляете, что это невозможно, и спросите, как это можно сделать. У вас есть конкретный сценарий? –
В упомянутой статье говорится «directlty», поэтому я предполагаю, что есть способ использовать их «косвенно». Конкретный пример: http://stackoverflow.com/questions/1200576/find-all-controls-on-msform-from-c – jedd
Чтобы добавить дополнительную информацию, VB.NET должен выполнить «косвенное», как работает восстановленный код. Если я ошибаюсь в коллекции Controls, я получаю ошибку: System.MissingMemberException 'произошел в Microsoft.VisualBasic.dll Итак, мне нужно знать, чего недостает, чтобы получить код для запуска в C#! – jedd