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

c# - MIDL不能创建tlb怎么办?

我正在尝试为sbtsv.idl(它包含在 Windows 8 SDK 中)创建一个 C# inproc 服务器。我发现的几乎每条指令都告诉您使用MIDL创建.tlb文件然后tlbimport创建代理 dll。

但是,如果 IDL 不包含library节,则不会.tlb生成文件,并且sbtsv.idl不包含library节。

我尝试创建自己的 IDL 文件,该文件声明了我想在库中创建的接口

但是,当我尝试运行它时,MIDL出现以下错误

我想我将被迫手动编写类和接口,但我想检查一下我是否做错了什么可以让它工作。

0 投票
1 回答
629 浏览

com - ISequentialStream 的 RemoteRead 和 RemoteWrite 成员是什么?

我正在开发一个使用该IStream接口读取和写入数据的 COM 库。我的 MIDL 代码如下所示:

由于IStream它的基本接口ISequentialStream未在类型库中定义,因此它们在我的中定义。到目前为止,一切都很好。但是,当我使用 OLEView 查看我的类型库时,ISequentialStream只定义了成员RemoteReadand RemoteWrite,而我期望Readand Write,因为它们是我实际调用的。更奇怪的是,MSDN列出了这两个成员(除了原始成员之外),但声明它们不受支持。

问题

那么这些成员是什么,我如何从客户端使用它们(例如,一个托管应用程序来创建一个托管Stream包装器IStream)?

漫长的故事

我想在客户端实现一个包装器,它将IStream调用转发到 .NET 流,例如System.IO.FileStream. 这个包装器可以像这样继承IStream

然后,我想用这个包装器调用我的服务器:

问题是,Lib.Stream在前面的示例中只提供RemoteReadand RemoteWrite,因此服务器调用stream->Read()最终会进入无人区。据我了解,有System.Runtime.InteropServices.ComTypes.IStream托管 COM 服务器,但在我的示例中,我有一个非托管 COM 服务器和一个应该提供IStream实例的托管客户端。

0 投票
2 回答
716 浏览

c# - 创建 COM 接口,返回一个在 C# 中编组为 IntPtr 的指针

我想在 MIDL 中声明一个允许返回指针的 COM 接口(如在 中ID3D11Blob)。我知道指针在 COM 中是一个特殊的东西,因为为 RPC 调用生成了存根。我不需要 RPC,但只想从 C# 访问 COM 服务器。问题是:我可以以 C# 存根返回的方式声明接口IntPtr吗?我试图添加[local]以启用void指针,但这还不够。

界面应该类似于 MIDL

并且在 C# 中

这可能吗?如果是这样,怎么做?

在此先感谢,克里斯托夫

编辑:改写问题:为什么是

变得

以及如何避免第一个参数byte在 C# 中成为单个参数?

0 投票
1 回答
695 浏览

visual-studio-2010 - 通过 Microsoft RPC 传递结构

我在将结构从 RPC 客户端传递到服务器时出错。客户端调用 Output3 过程。

IDL 中的定义:

在标头中生成:

服务器端的实现:

客户端代码:

可能有什么问题?

0 投票
1 回答
374 浏览

visual-studio-2010 - 将具有一致数组的 IDL 结构转换为标头

我需要通过具有一致数组的 Microsoft RPC 结构。这就是我在 IDL 中的编写方式:

生成的标头:

为什么 achArray 的长度固定为 1?如何将具有例如 10 个元素的数组传递给它?

0 投票
1 回答
307 浏览

python - 如何修复 MIDL 生成的 Typelib?

我正在尝试在此页面中使用 IDL 生成 INetCfg 接口的类型库,如下所示:

不幸的是,生成的 IDL 仍然无法从 comtype 加载,代码如下:

它给出了这个错误WindowsError: [Error -2147312566] Error loading type library/DLL

如何修复此错误?我正在使用 Windows 7 64 位和 Python 27 64

0 投票
1 回答
6260 浏览

c++ - Midl 编译器错误:2214

我的项目(OCX)有一些问题:当我尝试在发布模式下编译时,编译停止并显示以下消息:

“1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(1178,5):错误 MSB6006:“midl.exe”退出,代码为 2214。”

我找不到任何对调试错误有用的信息,因为它不是错误代码,而是退出代码。我可以做什么?它在开始解析“oaidl.acf”后立即停止。

0 投票
1 回答
1076 浏览

idl - 编译使用 OleView 创建的 IDL 时出现问题

为了更正枚举值名称的问题,在搜索之后,我需要修改我的 DLL 的 TLB 文件。我需要做的第一步是创建 IDL 文件。所以我使用 Oleview 创建文件。在进行修改以纠正我的问题之前,我决定尝试编译 IDL 文件。这给了我错误:

搜索问题后,我发现这个问题是纠正错误的方法。所以我改变了地方的枚举定义,现在我得到了这个错误:

我不知道是什么导致了错误,因为我只反转了我的枚举定义和函数定义。是什么导致我的文件中的最后一个错误?

0 投票
1 回答
391 浏览

c++ - Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针

我正在使用 MIDL 协议(RPC),我试图通过引用分配的 unsigned char 内存来传递指针。但只有数组的第一个属性填充了正确的值。

中间代码:

服务器代码:

客户端代码:

输出:

我如何通过引用传递所有数组?

0 投票
1 回答
246 浏览

c# - E_INVALIDARG 异常将 UDT 的 SAFEARRAY 从 Managed 传递到 COM

类似的问题在这里发布了很多次,但我不知道为什么我会得到这个 COM 异常。

我有一个 IDL 文件,例如:

现在, TMask 结构包含一个 TAction 字段。

我用 tlbimp(不带 /sysarray arg)创建了一个互操作组件,IDecoToniConfig.set_Masks() 的签名是:

但是当我从 c# 端调用它时,使用:

我得到:

为什么?