【发布时间】:2010-11-21 09:59:10
【问题描述】:
我在 IDL 文件中定义了一个接口,我想在 C# 中使用它。有没有办法将 IDL 转换为 C# 中可用的东西?
【问题讨论】:
-
在 C# 中可用的东西。可以编译的东西。
我在 IDL 文件中定义了一个接口,我想在 C# 中使用它。有没有办法将 IDL 转换为 C# 中可用的东西?
【问题讨论】:
一种方法是在 IDL 上运行 MIDL 以创建类型库 (.tlb)。这需要 IDL 中的 library 块。获得 .tlb 后,您可以在其上运行 tlbimp.exe 以获取 C# 定义/互操作 DLL。
【讨论】:
IDL 中使用了哪些数据类型/结构?如果还没有内置类型,则应首先在 C# 中定义数据类型。
您可以使用以下工具转换结构,但您需要手动验证输出。
此实用程序在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/找到源码。
【讨论】:
例如,我最近使用了 XPS Print API,需要 xpsobjectmodel.h 接口。幸运的是,Windows SDK 附带了 xpsobjectmodel.idl。
我首先使用 MIDL 生成了 TLB 文件,然后使用 TLBIMP 生成了一个合适的 DLL 程序集,准备好添加到我的 C# 项目的“参考...”部分。
确保为您的项目框架使用正确版本的工具。例如,如果您的项目框架基于 3.5,则无法使用 4.0 工具集中的 tlbimp。
【讨论】: