问题标签 [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 回答
124 浏览

midl - MIDL import 关键字生成大量编译器输出

.idl 文件中的每个导入都会生成以下输出:
64 位处理文件.idl

因此,对于每个处理的 idl 文件,我都有两页输出。有什么办法可以减少这种洪水?对我来说理想的是与 c++ 编译器所做的相同 - 如果没有警告或错误,则只有一行带有输入文件名的输出。

我试过 /nologo 和 /W0 开关,但没有帮助。有任何想法吗?

0 投票
1 回答
169 浏览

c++ - C++ 公开的属性名称与 IDL 中给出的名称不匹配

在 C++ 组件的 IDL 文件中,我有如下内容,允许该属性是 COM 可见的:

当我构建 dll 并在 OLEView 中打开时,我看到类似这样的内容!?

请注意,ID显示为id。但是,如果我修改此代码,说“ID2”,那么ID2会按预期显示。然后我改回“ID”并再次显示id。这对我来说很莫名其妙。机器上必须有一些东西,这意味着该属性的 DLL 公开名称是小写的,但我在注册表中找不到任何东西。

有任何想法吗?很困惑...

0 投票
1 回答
213 浏览

types - IDL 中的可移植地址偏移参数

我正在将旧的 32 位 COM 服务器移植到 64 位架构。

许多函数将缓冲区地址和偏移量作为参数,如 __int3264 和 __int3264 指针。问题是这种类型在 x64 中不会自动生成为 __int64,因为接口是 IDispatch 继承的,并且自动化接口不支持 __int3264!

对于需要地址的函数,我将 __int3264* 替换为 void*。

偏移参数被放置为 __int3264 和 LONG(在自动化 + x64 中均为 32 位)。我不能使用 hyper(映射为 __int64),因为它会在 32 位系统中中断。

我应该对所有偏移量/地址参数使用 void* 还是有另一种方法将它们移植到 x64 COM 服务器?

0 投票
1 回答
765 浏览

c++ - VS2008 C++ 编译器不断要求构建项目

可能重复:
Visual Studio 不断构建一切

我有一个项目,其中包含一个 idl 文件,该文件生成一个 .c 文件,该文件包含在同一项目的另一个文件中。

我构建了这个项目,一切都很好,然后我尝试运行该项目,我被告知该项目已过时,我想构建它。如果我选择是来构建它,idl 将再次编译。

有没有办法在不将 VS 项目设置设置为从不提示我进行构建的情况下停止这种情况?

0 投票
1 回答
2358 浏览

com - MIDL 编译器错误:MIDL

当我使用 MIDL 将 IDL 文件编译为 .h 和 .c 时,我收到一条错误消息:

midl:命令行错误 MIDL1004:无法执行 C 预处理器 cl.exe。

请帮助我,我不知道为什么。

我使用的 MIDL 编译器是 VC++ 6.0 的一部分。

谢谢。

0 投票
0 回答
3711 浏览

windows - 从 DLL 创建 IDL 文件

我正在开发一个 VB6 图形界面,该界面使用从使用__declspec(thread)变量的 C 代码生成的 DLL。问题是由于已知限制,无法在 VB6 项目中动态链接此 dll。

因此,正如讨论中所建议的,一种可能的解决方案是从 DLL 创建一个 IDL 文件,使用 MIDL 编译器对其进行编译,然后在 VB6 项目中引用生成的 .tlb 文件。

在我必须指定包含结构变量的函数之前,我能够生成 .tlb 文件

在行: int myFunct([in] myStruct data);编译器说:

syntax error: expecting a type specification near "myStruct"

有没有办法让它工作?就像 IDL 文件中的某种结构声明一样?

谢谢,

国标

在这里由 wqw解决。谢谢

0 投票
1 回答
190 浏览

c++ - 只有一些 tlb 的成员类被注册

我有一个已经存在的 odl 文件,我使用 MIDL.exe 从中创建了 tlb 我在搜索注册表时使用 regtlib.exe 注册了 tlb 我只能找到类型库本身的 id 和主调度接口,并且我找不到其余的 coclasses 和接口,当我尝试使用它们时,我得到“类未注册”错误。注意:我在 Visual Studio 2003 中使用 VC++。我可以在 VS 的对象浏览器窗口中查看 tlb,它看起来很好,并且其中包含所有其他成员类。

0 投票
1 回答
1383 浏览

c++ - MIDL 有没有办法关闭 C 样式的标头生成?

我有一个简单的 .IDL 文件 (iface.idl),它描述了一个基于 IUnknown 的接口:

当试图编译它时,midl /header iface.h iface.idl我得到了 3 个文件:iface.h、iface_i.c 和 iface_p.c。iface.h 文件包含 ISunpathCalc 接口的 C++ 声明:

该文件剩余的较大部分包含不必要的 C 内容。

问:有没有办法告诉 MIDL 只生成标头的 C++ 部分?是否可以关闭 iface_i.c 和 iface_p.c 文件的生成并强制 MIDL 生成 C++ 定义?

UPD1:

我尝试添加此处指定的 [local] 属性:

但没有任何成功。

0 投票
1 回答
825 浏览

com - 以编程方式从 TypeLibrary 获取 IDL 代码

我正在编写代码来执行以下步骤;

注册一个 .net .dll 并使用 regasm.exe 生成一个 .tlb

  1. 注册一个 .net .dll 并使用 regasm.exe 生成一个 .tlb
  2. 从 typeLibrary 生成 IDL 代码并将其存储在文件中。
  3. 编辑 IDL 代码,进行少量更改。
  4. 使用 Midl.exe 将 IDL 重新编译为 .tlb。

我确信您已经猜到了,我坚持的步骤是 IDL 的生成。我知道这可以通过使用 Windows API 附带的 OleViewer 手动完成,但是我想删除这个手动步骤。

我似乎无法通过命令行操作 OleViewer 或找到任何其他生成 IDL 代码的方法。

有人有什么想法吗?我知道生成 IDL 的代码必须在 OleViewer 的某个地方……也许有办法访问它?

0 投票
2 回答
586 浏览

c++ - 中。为什么将方法添加到idl后回调c ++接口不更新?

我尝试用 COM 技术实现回调接口,并有这样的 IDL:

请注意,IMyClass 有 SomeMethod 声明,但我不知道为什么当我重新编译/重建项目时它没有出现在我的自动生成的类中。

它总是被声明为空的:

我在这里做错了什么?