2009-08-20 2 views
20

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

+0

Что такое «что-то полезное»? – Achim

+0

Что-то полезное в C#. Что-то, что скомпилируется. –

ответ

27

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

+0

, и вы можете использовать [JetBrains dotPeek] (https://www.jetbrains.com/decompiler/), чтобы просмотреть определение C# из сгенерированной DLL-взаимодействия. –

4

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

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

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

Эта утилита описана в Accessing Windows API Constants and Structs for P/Invoke.

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

+0

Где находится документация для этого> ?? –

+1

@ChandraEskay Поскольку ссылка на статью MSDN больше не верна, я позволил вам обновить информацию об этой утилите. –

1

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

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

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