Конвертировать интерфейс IDL файл в C # - PullRequest
21 голосов
/ 20 августа 2009

У меня есть интерфейс, определенный в файле IDL, который я хотел бы использовать в C #. Есть ли способ конвертировать IDL во что-то пригодное для использования в C #?

Ответы [ 3 ]

29 голосов
/ 20 августа 2009

Одним из способов является запуск MIDL в IDL для создания библиотеки типов (.tlb). Для этого требуется блок library в IDL. Если у вас есть .tlb, вы можете запустить tlbimp.exe, чтобы получить определение C # / Interop DLL.

4 голосов
/ 20 августа 2009

Какие типы данных / структуры используются в IDL? Сначала вы должны определить типы данных в C #, если нет встроенного типа.

Вы можете использовать следующий инструмент для преобразования структур, но вам необходимо проверить вывод вручную.

Скачать: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CLRInsideOut2008_01.exe

Эта утилита описана в Доступ к константам и структурам API Windows для P / Invoke .

Оригинальная статья за январь 2008 года теперь доступна только в виде файла справки .CHM , ссылка на которую приведена внизу https://msdn.microsoft.com/magazine/msdn-magazine-issues. В настоящее время исходный код можно найти по адресу http://clrinterop.codeplex.com/.

1 голос
/ 31 октября 2014

Например, я недавно использовал API печати XPS и нуждался в интерфейсах xpsobjectmodel.h. К счастью, Windows SDK поставляется с xpsobjectmodel.idl.

Сначала я сгенерировал файл TLB с помощью MIDL и использовал TLBIMP для генерации правильной сборки DLL, готовой для добавления в раздел «Ссылки» в моем проекте C #.

Обязательно используйте инструменты с верной версией для вашего проекта. например, если ваш фреймворк основан на 3.5, использование tlbimp из набора инструментов 4.0 не будет работать.

...