Универсальные типы возврата Marshal для com-взаимодействия

Можно ли маршалировать универсальный возвращаемый тип как неуниверсальный для COM-взаимодействия?

Скажем, у меня есть следующий класс:

[ComVisible(true)]
public class Foo
{
    public IEnumerable<string> GetStr() // Generic return type
    {
        yield break;
    }
}

Я знаю, что IEnumerable‹string› реализует IEnumerable.

Могу ли я заставить tlbexp.exe (через атрибут return: или каким-либо другим способом) выставить метод GetStr() как метод, возвращающий IEnumerable?


person ichen    schedule 08.04.2010    source источник


Ответы (1)


Я не думаю, что это возможно, нет. Когда вы сталкиваетесь с ограничениями маршалинга COM-взаимодействия, обычно лучше создать отдельный тип оболочки с интерфейсом, удобным для COM, и оставить исходный тип как можно более удобным для .NET.

person Mattias S    schedule 08.04.2010
comment
Хорошо, но как это сделать?!? - person CoderDennis; 18.05.2011
comment
@CoderDennis: добавьте метод-оболочку с неуниверсальным возвращаемым значением, например, public IEnumerable GetStrInterop() { return GetStr(); }, и используйте этот метод для взаимодействия. - person Heinzi; 03.04.2013