У меня есть интерфейс, определенный в файле IDL, который я хотел бы использовать в C#. Есть ли способ конвертировать IDL в нечто, пригодное для использования на C#?Преобразование IDL-файла интерфейса в C#
ответ
Один из способов - запустить MIDL
в IDL для создания библиотеки типов (.tlb). Для этого требуется блок library
в IDL. Когда у вас есть .tlb, вы можете запустить tlbimp.exe
на нем, чтобы получить C# definition/Interop DLL.
, и вы можете использовать [JetBrains dotPeek] (https://www.jetbrains.com/decompiler/), чтобы просмотреть определение C# из сгенерированной DLL-взаимодействия. –
Какие типы данных/структуры используются в IDL? Сначала вы должны определить типы данных в C#, если уже нет встроенного типа.
Вы можете использовать следующий инструмент для преобразования структур, но вам нужно проверить вывод вручную.
Эта утилита описана в 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/.
Где находится документация для этого> ?? –
@ChandraEskay Поскольку ссылка на статью MSDN больше не верна, я позволил вам обновить информацию об этой утилите. –
Например, я недавно использовал API печати XPS и нуждался в интерфейсах xpsobjectmodel.h. К счастью, Windows SDK поставляется с xpsobjectmodel.idl.
Я сгенерировал TLB-файл с использованием MIDL и использовал TLBIMP для создания надлежащей сборки DLL, готовой для добавления в разделе «Ссылки ...» моего проекта C#.
Обязательно используйте инструменты с правильной версией для вашей проектной структуры. например, если ваша структура проекта основана на 3,5, использование tlbimp из набора инструментов 4.0 не будет работать.
Что такое «что-то полезное»? – Achim
Что-то полезное в C#. Что-то, что скомпилируется. –