23

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

4

3 回答 3

32

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

于 2009-08-20T17:38:39.500 回答
6

IDL 中使用了哪些数据类型/结构?如果还没有内置类型,则应首先在 C# 中定义数据类型。

您可以使用以下工具来转换结构,但您需要手动验证输出。

下载:http: //download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CLRInsideOut2008_01.exe

访问 P/Invoke 的 Windows API 常量和结构中描述了此实用程序。

2008 年 1 月的原始文章现在仅作为.CHM 帮助文件下载提供,链接在https://msdn.microsoft.com/magazine/msdn-magazine-issues的底部。目前,可以在http://clrinterop.codeplex.com/找到源代码。

于 2009-08-20T17:46:08.843 回答
2

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

我首先使用 MIDL 生成了 TLB 文件,然后使用 TLBIMP 生成了一个适当的 DLL 程序集,可以将其添加到我的 C# 项目的“参考...”部分中。

请务必为您的项目框架使用正确版本的工具。例如,如果您的项目框架是基于 3.5 的,则使用 4.0 工具集中的 tlbimp 将不起作用。

于 2014-10-31T17:59:36.837 回答