问题标签 [midl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
921 浏览

c++ - [MIDL]如何在idl文件中使用c/c++头文件中声明的接口?

ID2D1RenderTarget是在 中定义的接口d2d1.h。我想在我的 IDL 界面中使用它,如下所示:

d2d1.idl不包含在 SDK 中,我只能得到d2d1.h(也没有 d2d1.tlb)。

我试过包括d2d1.h使用 cpp_quote:

它提出:

然后我添加了一个typedef:

错误变成了这样:

我也尝试过添加cpp_quote("#define D2D_USE_C_DEFINITIONS")在包含之前添加,但它什么也没做。

那么我应该怎么做才能ID2D1RenderTarget在我的 IDL 文件中使用呢?

0 投票
0 回答
404 浏览

c++ - 函数指针 typedef 在 MIDL 中只允许一次?

这是一个简单的测试。函数指针类型 FN_t 在 ITest::Test & ITest::Test2 中出现两次。

错误消息:midl\oleaut32.dll:错误 MIDL2020:错误生成类型库:SetFuncAndParamNames 失败:__MIDL____MIDL_itf_test_0000_00000000 (0x8002802C)

通过评论!错误!行,MIDL 运行良好。那么为什么以及如何使代码工作呢?

==================================================== =================================

我想我可以自己回答。

对于单个 ITest::Test 方法。生成的 typelib 中的接口是:

似乎 typelib 不知道函数指针类型是什么。

然后我添加了一个 wire_marshal 属性,它可以工作:

0 投票
2 回答
185 浏览

c++ - MIDL 编译错误:带有“cy”的枚举

我有一个简单的 IDL 文件,其中仅包含一个enum. 标识符之一是cy.

但是,MIDL 不会编译它并给我一个错误,例如:

MIDL2025:期待“cy”附近的标识符

我的第一个猜测是这cy是 MIDL 中的关键字/保留词——但事实并非如此。
我的第二个猜测是,要么cy已经在某个地方使用过,要么是一种类型——但事实并非如此。

关于这里可能是什么问题的任何想法?

0 投票
1 回答
8119 浏览

windows - midl 找不到 C 预处理器 cl.exe

我正在尝试用 midl 编译我的 arith.idl 文件。我正在运行 Windows 7 专业版。

这是我在 powershell 提示符下启动的命令:

我是 Windows RPC 编程的菜鸟,非常感谢一些帮助。我已阅读内容,但这并不能解决任何问题(相同的症状)。我还尝试使用以下命令指定预处理器 cl.exe:

此命令不返回任何内容,并且

返回 False

编辑:

vcvarsall.bat 文件的执行不会改变任何内容。这是我启动的 powershell 命令的输出:

0 投票
1 回答
195 浏览

com-interop - 为什么在编译和导入 bits.idl 时会得到额外的 GUID 类型定义?

我正在针对COM BITS API编写一些 .NET 代码。我在 windows kits 下找到了 bits.idl 文件,并且做了midl bits.idl,它给了我 bits.tlb。然后我运行tlbimp bits.tlb并获得了 BackgroundCopyManager.dll。

在这个程序集中一切都符合预期(由我的 .net 项目引用),并显示在 VS 2013 的对象浏览器中,并且在 ildasm 中看起来不错,但有一个例外。我现在在 BackgroundCopyManager 命名空间中有一个新的 GUID 类型,我真的不认为我想要它。

我在想 System.Guid 足以满足我所有的 .NET 端 GUID、CLSID 和 IID 相关需求。我可以以某种方式摆脱多余的吗?在 System.Guid 和这个冒名顶替者之间进行转换并不简单,而且似乎没有必要。

我唯一能想到的是,这些接口中有几种方法使用 GUID 作为参数类型,并且由于这个 idl 文件是从 2000 年开始的,我猜想 .NET Interop 还不是一个东西。

0 投票
1 回答
150 浏览

com - 两个简单的 COM IDL 语法问题:有没有办法指定线程模型,我是否需要 void 来表示“无参数”?

即使搜索 MSDN 和一般互联网,我似乎也找不到两个简单的 COM IDL 文件问题的答案:

  1. 是否有一个接口属性可以让我指定我的接口仅由 STA 对象实现,或者这只是我的文档的详细信息?我已经有了[object, local]我认为对于非远程(进程中)COM 对象是正确的。

  2. 我是否需要void在方法声明的括号中(如在 C 中)不指定参数?MSDN 对此不一致;头文件也是如此。我自己对此接口的个人实现将使用 C 语言。

谢谢。

0 投票
1 回答
308 浏览

c++ - 在预处理指令后避免(生成的)令牌的 gcc 警告?

Microsoft 的 MIDL 编译器生成的 C/C++ 源代码文件有些无效,例如此摘录中的代码:

Visual C++ 忽略之后的标记#endif,但神圣标准在那里不需要任何东西,因此 g++ 会出错,甚至 gcc(编译为 C)也会产生警告:

每次生成该代码时手动修复该代码会变得烦人且烦人。

假设 gcc 必须编译代码,是否有更好的方法来避免这个明显未命名的警告?

我已经大致查看了一个关于此的现有问题,但无济于事。

0 投票
1 回答
5865 浏览

winapi - 如何调用 MIDL 编译器从 .IDL 文件生成 .TLB 文件(类型库)?

我正在为看似超级简单的事情苦苦挣扎:我想使用 MIDL 编译器.tlb从文件生成类型库(文件).idl。但是,我就是无法让 MIDL 生成.tlb文件。

这是我的Foo.idl

这就是我调用 MIDL 编译器的方式:

它将以下输出写入控制台:

MIDL 编译器生成三个文件:Foo.h, Foo_i.c, Foo_p.c... 但没有Foo.tlb。我是不是误解了什么,或者这里出了什么问题?

0 投票
1 回答
3676 浏览

windows - 在 Windows 上编译 Hadoop 时缺少“ammintrin.h”?

UPDATE-2
我更新了 Windows SDK 编译器,现在将错误减少到 2 个。

现在无论我在哪里搜索,我发现要获取这个 .h 文件,我需要安装 Microsoft Visual Studio Service Pack 1。我没有 Visual Studio,我使用的是 Windows SDK 7.1。现在,我在哪里可以找到适用于 Windows SDK 7.1 的等效 Service Pack 1?
UPDATE-2 结束

更新
盯着堆栈跟踪一段时间后,我看到这里发生了错误

所以,我试图只运行这个命令

现在我收到以下错误

当我搜索文件 oaidl.ild 时。我在文件夹中找到它

我将它包含在 PATH 中并再次运行该命令,但出现相同的错误。我注意到文件名是“OAIdl.Idl”而不是“oaidl.idl”。

hadoopwinutilsvc.idl 文件的第一行是“include oaidl.idl”。

这是否意味着这些是 hadoop 源中的错误?

结束更新 - 下面的原始问题。

我正在尝试在 Windows 7 x64 上构建 hadoop。
我不断收到以下错误。
我在下面提供了相关的堆栈跟踪。任何帮助都感激不尽。
我在命令提示符下运行的命令是
mvn package -Pdist,native-win -DskipTests -Dtar

0 投票
0 回答
270 浏览

midl - MIDL 编译器附加自定义字符串值属性

是否可以禁止 MIDL 编译器在生成的 COM dll 构建中将自定义属性附加到生成的接口定义?我怀疑 MIDL 编译器附加的属性会使我们的 dll 失败并导致错误:“自动化服务器无法创建对象”,因为它插入了字符串值属性。这些信息由 Oleview.exe 的 Itypelib 查看器提取。

这是我们 dll 工作版本的定义,也是我在使用带有 MIDL 版本 8 的 Visual Studio 2013 时打算复制的内容。