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

midl - MIDL 复杂类型作为接口方法参数

我想知道是否有一些好的解决方案来处理无法导入 IDL 的复杂类型。我最大的担忧是使用 _m128 向量类型进行 simmed 指令,即。XMVECTOR。midl 编译器无法识别 __declspec,因此无法导入 __m128 数据类型。我研究过使用 wire_marshal 来执行此操作,但我认为它需要了解 __m128 类型的 typedef。如果有一种方法可以让我在前言声明 XMVECTOR 以与wire_marshal 一起使用,那么我对如何做到这一点一无所知。

我曾想过通过封装来隐藏类型,这已经是我为反射封装数据类型的原因了。我在这里尝试了一些想法,包括从 COM 和 C++ 接口继承。这里没有什么看起来太有希望了。

很多人告诉我不要使用 COM,老实说,我花了很多时间不编码,只是想弄清楚这些东西。我的逻辑一直看到使用 COM 有很多好处,而包括 MyCOM 在内的替代方案看起来既费时又充满问题。如果这是我使用 COM 的最大问题,我应该继续前言还是解决方案会减慢这个应用程序的速度,记住它对图形表示和实时计算建模的依赖?我正在考虑在渲染农场或云或类似的规模上做一些事情......我说得很大,我知道我是菜鸟,所以请不要试图给人留下深刻印象,只是想了解情况......我已经做了很多的研究!

谢谢,贝卡德:

0 投票
2 回答
1917 浏览

visual-studio - Visual Studio 如何确定编译 IDL 文件的顺序?

我有一个 COM 项目,其中包含许多 IDL 文件,其中一些被导入到其他文件中。Visual Studio 如何决定首先编译哪些(使用 MIDL)?

我想控制顺序。我有一个主 IDL 文件,其中包含我的库声明和几个导入,如果它不是第一个编译的,我会收到构建错误。

(如果这听起来真的很奇怪......我是 COM/ATL 的新手,这真的非常令人困惑)。

0 投票
2 回答
3577 浏览

visual-studio-2010 - MIDL 编译错误(可能还有 idl 文件生成问题)

我们正在考虑将我们的应用程序从 VS2008 迁移到 VS2010。

我们使用“属性编程”生成一些 COM 对象,并自动生成 IDL。

两个文件的导入指令不同,在 VS2010 上编译失败。

在 VS2008 上,它会生成如下内容:

在 VS 2010 上

在 VS2010 上编译 IDL 时会产生以下错误

手动删除“wincrypt.idl”导入指令会删除编译错误,但这不是解决方案,因为 idl 是自动生成的。

我不确定为什么这两个 IDL 不同以及添加导入指令的责任是什么;甚至如何修复 MIDL 编译错误。

有任何想法吗 ?

提前致谢。

最大限度。

0 投票
1 回答
389 浏览

com - 使用大量 IDL 接口管理 COM 类型库中的定义

我正在创建一个具有一百多个接口的 COM 类型库。在单个中定义所有接口和 coclasslibrary是不合理的...... IDL 文件变成了数千行!所以我尝试将每个接口放在自己的文件中,并使用imports 来满足其依赖关系。

我可以使用什么策略来管理这么多接口?我试图在import任何地方使用指令,但我一直试图将它们包含在 TLB 中。我已经尝试过#includelibrary但依赖项似乎变得很时髦。

示例A.idl

ExampleB.idl

示例库.idl

0 投票
1 回答
2818 浏览

atl - 从外部类型库导入 IDL 中的接口

我有两个使用 ATL 和 Microsoft 的 IDL 编写的带有 COM 接口的类型库。我希望一个库中的接口从另一个库中的接口继承。

本质上,我想做 Steven 在如何使用 .tlb 类型在 VS C++ 中创建接口方法?. 唯一回答他的人似乎不明白这个问题。

这是我想做的,在代码中:


SomeLibrary DLL/TLB

ISomeInterface.idl

SomeLibrary.idl


SomeOtherLibrary DLL/TLB

ISomeOtherInterface.idl

SomeOtherLibrary.idl


MIDLimport指令仅在导入 IDL 文件时有效,而我只有一个 DLL 和 TLB。我不能使用importlib,因为这只适用于library定义。MIDL 编译器不理解 Microsoft 的 C++ importimportidlimportlib属性。

该怎么办?

0 投票
1 回答
639 浏览

visual-studio - 防止重新编译 oaidl.idl 和 ocidl.idl

我有一个带有许多 IDL 文件的 COM/ATL 项目。大多数这些 IDL 文件importoaidl.idl 和 ocidl.idl。

每当我编译我的项目时,Visual Studio每次遇到import 时都会调用 MIDL 来重新编译 oaidl.idl 和 ocidl.idl ...。这两个 IDL 文件最终会被重新编译多次,从而使项目编译需要很长时间!

有没有办法强制 Visual Studio 只编译一次 oaidl.idl 和 ocidl.idl?

0 投票
1 回答
3640 浏览

com - 使用 Midl 从 .idl 创建 .tlb 的问题“期望类型规范”

我一直在与被称为 COM Interop 的野兽长期相遇……

我目前正在尝试从由 OLE/COM 对象查看器生成的 .idl 文件生成 .tlb。然而,当试图运行 Midl.exe 来编译它时,我得到一个错误:

我的 .idl 文件超过 1000 行,所以我不想在这里发布它,但我相信感兴趣的部分是:

然后几行之后......

我有一种感觉,应该尊重这些以修复类型规范错误。但是,如果我这样做,我会遇到一个新问题。

我对 idl 格式和 midl.exe 的使用非常不熟悉,也许我正在做的事情有什么明显的错误?

一如既往,任何帮助将不胜感激:)

0 投票
3 回答
1721 浏览

com - 将两个 .IDL 文件或两个 .tlb 文件合并为一个文件

我有 2 个 .net dll,我使用 REGASM 向 COM 公开。为了简化 COM 客户端中的引用,我想将它们合并到一个文件中。

我尝试将这两个文件都转换为 IDL,然后将其中一个文件的库部分的内容复制到另一个文件中,然后使用 MIDL 编译回 .tlb。这适用于第二个 IDL 中的 TypeDef,但是当涉及到我复制的接口时,它似乎失败了。OLE/COM 查看器可以看到接口定义,但是当我尝试通过 COM 使用 TLB 时,它找不到接口我复制进去了。

在我花太多时间在这之前,我想确保实际上可以通过这种方式来减少 IDL。

0 投票
3 回答
4640 浏览

c++ - 有什么方法可以解决 C4772 错误而无需注册 DLL?

我正在维护一个 VS2010 项目,其中包含许多交叉引用的 COM 库。我正在尝试以可以从安装了 VS2010 的随机工作站构建的方式配置项目。工作站可以是 32 位和 64 位的,所以如果我将项目配置为“注册输出”,则构建将无法在 32 位机器上构建,因为无法加载 64 位 DLL 来调用 DllRegisterServer。

这是一个示例:项目 B 中的 Typelib 引用了项目 A 中的 typelib。项目 C 将通过以下语句引用项目 B:

由于库 B 引用 A,当 B.tlb 被导入时,编译器会尝试从 A 加载类型。因此,如果 A 未注册,编译将失败并显示:

我尝试使用 OleView 应用程序打开 B.tlb,如果使用 regsvr32 注册,它肯定只显示库 A 引用的正确文件名。

所以,我的问题是:是否有任何替代方法可以让库引用正确解析,而无需注册 TLB,只需将所有文件以某种方式放在同一目录中,或附加某种清单?例如,将库的 TLB 重命名为 .tlb 或类似的名称。

0 投票
2 回答
255 浏览

visual-studio-2008 - Visual Studio 6 类型库在 Vista 和 7 下的 Visual Studio 2008 中的处理方式是否不同?

我在 Visual Studio 6 C++ 中编写了一个标准 DLL。我还编写了一个 typelib 来配合它,以便它可以直接在 VB6 中使用,而不是通过 Declare。

它在 Windows XP 下的 VB6 中运行良好。

当我将 DLL 和 TLB 带入 Vista 和 Windows7 时,不起作用。.TLB 在那里可以很好地注册,REGTLIB但在 Visual Studio 2008 中唯一可见的符号是Attribution常量。

我试图模拟的技术可以在How To Make C DLL More Accessible to VB with a Type Library中找到。难道这种技术不再适用???

(缩写的)ODL 代码复制如下。知道发生了什么吗?