将接口 IDL 文件转换为 C#

Posted

技术标签:

【中文标题】将接口 IDL 文件转换为 C#【英文标题】:Convert Interface IDL file to C# 【发布时间】:2010-11-21 09:59:10 【问题描述】:

我在 IDL 文件中定义了一个接口,我想在 C# 中使用它。有没有办法将 IDL 转换为 C# 中可用的东西?

【问题讨论】:

在 C# 中可用的东西。可以编译的东西。 【参考方案1】:

一种方法是在 IDL 上运行 MIDL 以创建类型库 (.tlb)。这需要 IDL 中的 library 块。获得 .tlb 后,您可以在其上运行 tlbimp.exe 以获取 C# 定义/互操作 DLL。

【讨论】:

然后你可以使用JetBrains dotPeek从生成的互操作DLL中查看C#定义。【参考方案2】:

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 年 1 月的原始文章现在仅以 .CHM help file download 的形式提供,链接在 https://msdn.microsoft.com/magazine/msdn-magazine-issues 的底部。暂时可以在http://clrinterop.codeplex.com/找到源码。

【讨论】:

这方面的文档在哪里>?? @ChandraEskay 由于指向 MSDN 文章的链接不再正确,我冒昧地更新了有关此实用程序的信息。【参考方案3】:

例如,我最近使用了 XPS Print API,需要 xpsobjectmodel.h 接口。幸运的是,Windows SDK 附带了 xpsobjectmodel.idl。

我首先使用 MIDL 生成了 TLB 文件,然后使用 TLBIMP 生成了一个合适的 DLL 程序集,准备好添加到我的 C# 项目的“参考...”部分。

确保为您的项目框架使用正确版本的工具。例如,如果您的项目框架基于 3.5,则无法使用 4.0 工具集中的 tlbimp。

【讨论】:

以上是关于将接口 IDL 文件转换为 C#的主要内容,如果未能解决你的问题,请参考以下文章

从 Java 源文件生成 CORBA IDL?

protobuf(Protocol Buffers).proto文件中的IDL(Interface Definition Language 接口定义语言)是什么?

为 MAPI-MIME 转换创建 IDL

使用 c# 将 png 文件转换为 pcx 文件

使用 C# 将 csv 文件转换为 json

从 corba 转换为 slice