У меня есть интерфейс, определенный в файле IDL, который я хотел бы использовать в С#. Есть ли способ конвертировать IDL в нечто, пригодное для использования на С#?
Преобразование IDL файла интерфейса в С#
Ответ 1
Один из способов - запустить MIDL
в IDL для создания библиотеки типов (.tlb). Для этого требуется блок library
в IDL. После того, как у вас есть .tlb, вы можете запустить tlbimp.exe
на нем, чтобы получить определение С#/Interop DLL.
Ответ 2
Какие типы данных/структуры используются в IDL? Сначала вы должны определить типы данных в С#, если уже нет встроенного типа.
Вы можете использовать следующий инструмент для преобразования структур, но вам нужно проверить его вручную.
Эта утилита описана в Доступ к константам и структурам Windows API для P/Invoke.
Оригинальная статья за январь 2008 года теперь доступна только как . Загрузка файла справки CHM, связанная внизу https://msdn.microsoft.com/magazine/msdn-magazine-issues. Пока что исходный код можно найти на http://clrinterop.codeplex.com/.
Ответ 3
Например, я недавно использовал API печати XPS и нуждался в интерфейсах xpsobjectmodel.h. К счастью, Windows SDK поставляется с xpsobjectmodel.idl.
Я сгенерировал TLB файл с использованием MIDL и использовал TLBIMP для создания надлежащей сборки DLL, готовой для добавления в разделе "Ссылки..." моего проекта С#.
Обязательно используйте инструменты с правильной версией для вашей структуры проекта. например, если ваша структура проекта основана на 3.5, использование tlbimp из набора инструментов 4.0 не будет работать.