У меня есть класс C #, который имеет свойство (имя List) типа Microsoft.VisualBasic.Collection.Нам нужно выставить это свойство для COM.Для этого я писал интерфейс для своего класса, чтобы свойство маршалировалось как UnmanagedType.IDispatch.Примерно так:
[DispId(0x68030000)]
Collection List { [DispId(0x68030000)] [return: MarshalAs(UnmanagedType.IDispatch)] get; }
Этот фрагмент кода был ранее в VB и использовался C ++ как тип VT_DISPATCH.Однако при создании библиотеки C # я получаю следующую ошибку:
C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (4335,5): ошибка MSB3212: сборка «Name.dll» не может быть преобразована в библиотеку типов.Экспортер библиотеки типов обнаружил ошибку при обработке 'Namespace.InterfaceName.get_List (# 0), ProjectName'.Ошибка: Ошибка при загрузке библиотеки типов / DLL.
Я прочитал несколько постов в Интернете, в которых предполагалось, что такие ошибки могут возникать из-за повторяющихся идентификаторов GUID.Но это не тот случай.Я пытался с несколькими GUID.Я не чувствую, что это проблема с любым другим атрибутом, который я установил в своем интерфейсе, поскольку я могу маршалировать другие свойства и вызовы функций (некоторые из них используют примитивные типы, а другие используют пользовательские классы).
Вот как он используется в потребляющем приложении C ++:
LPDISPATCH result;
InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
Эта проблема стала действительной для клиента, и у меня действительно не так много времени, чтобы продолжить расследование, поскольку это должно произойти завтра.
Ценю любую помощь!