Просто определите структуру/класс.
[Serializable]
public struct KeyValuePair<K,V>
{
public K Key {get;set;}
public V Value {get;set;}
}
В этот ответ на другой вопрос, касающийся маршалинга , пользователь voyce указывает на эту статью , в которой в основном говорится следующее:
Когда какой-либо интерфейс (производный от IDispatch или нет) отмечен либо dual
, либо oleautomation
(или обоими), он обрабатывается специально при вызове RegisterTypeLib ()
( что обычно выполняется DllRegisterServer). Для каждого такого интерфейса создается ключ HKCR \ Interface {InterfaceId}, под которым класс {00020424-0000-0000-C0000-000000000046} упоминается как прокси / заглушка. Этот идентификатор класса соответствует маршаллеру библиотеки типов, также известному как маршаллер oleautomation.
Я не вижу причины, по которой это сработает, учитывая документы здесь: http://msdn.microsoft.com/en-us/library/aa366807 (VS.85) .aspx
Интерфейсы, идентифицируемые двойным атрибут должен быть совместим с Автоматизация и быть производными от IDispatch. Этот атрибут не разрешено на диспетчерских интерфейсах.
Возможно, атрибут [dual]
неявно добавляет IDispatch
к интерфейсу.
Что вы можете сделать, так это проверить код, реализующий интерфейс ( предполагая, что это ATL), если он происходит от IDispatchImpl
. Если это так, он фактически отвечает на QI для IDispatch
и может использоваться как таковой.
Другой альтернативой является создание экземпляра объекта, реализующего IOurInterface
и QI it для IDispatch
- если это удастся, вы, вероятно, не сможете удалить его.
На самом деле, если подумать, может быть [dual]
технически не требует, чтобы вы производили от IDispatch
, если вы реализуете и собственный интерфейс, и IDispatch
?