问题标签 [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.
c# - MIDL不能创建tlb怎么办?
我正在尝试为sbtsv.idl
(它包含在 Windows 8 SDK 中)创建一个 C# inproc 服务器。我发现的几乎每条指令都告诉您使用MIDL
创建.tlb
文件然后tlbimport
创建代理 dll。
但是,如果 IDL 不包含library
节,则不会.tlb
生成文件,并且sbtsv.idl
不包含library
节。
我尝试创建自己的 IDL 文件,该文件声明了我想在库中创建的接口
但是,当我尝试运行它时,MIDL
出现以下错误
我想我将被迫手动编写类和接口,但我想检查一下我是否做错了什么可以让它工作。
com - ISequentialStream 的 RemoteRead 和 RemoteWrite 成员是什么?
我正在开发一个使用该IStream
接口读取和写入数据的 COM 库。我的 MIDL 代码如下所示:
由于IStream
它的基本接口ISequentialStream
未在类型库中定义,因此它们在我的中定义。到目前为止,一切都很好。但是,当我使用 OLEView 查看我的类型库时,ISequentialStream
只定义了成员RemoteRead
and RemoteWrite
,而我期望Read
and Write
,因为它们是我实际调用的。更奇怪的是,MSDN列出了这两个成员(除了原始成员之外),但声明它们不受支持。
问题
那么这些成员是什么,我如何从客户端使用它们(例如,一个托管应用程序来创建一个托管Stream
包装器IStream
)?
漫长的故事
我想在客户端实现一个包装器,它将IStream
调用转发到 .NET 流,例如System.IO.FileStream
. 这个包装器可以像这样继承IStream
:
然后,我想用这个包装器调用我的服务器:
问题是,Lib.Stream
在前面的示例中只提供RemoteRead
and RemoteWrite
,因此服务器调用stream->Read()
最终会进入无人区。据我了解,有System.Runtime.InteropServices.ComTypes.IStream
托管 COM 服务器,但在我的示例中,我有一个非托管 COM 服务器和一个应该提供IStream
实例的托管客户端。
c# - 创建 COM 接口,返回一个在 C# 中编组为 IntPtr 的指针
我想在 MIDL 中声明一个允许返回指针的 COM 接口(如在 中ID3D11Blob
)。我知道指针在 COM 中是一个特殊的东西,因为为 RPC 调用生成了存根。我不需要 RPC,但只想从 C# 访问 COM 服务器。问题是:我可以以 C# 存根返回的方式声明接口IntPtr
吗?我试图添加[local]
以启用void
指针,但这还不够。
界面应该类似于 MIDL
并且在 C# 中
这可能吗?如果是这样,怎么做?
在此先感谢,克里斯托夫
编辑:改写问题:为什么是
变得
以及如何避免第一个参数byte
在 C# 中成为单个参数?
visual-studio-2010 - 通过 Microsoft RPC 传递结构
我在将结构从 RPC 客户端传递到服务器时出错。客户端调用 Output3 过程。
IDL 中的定义:
在标头中生成:
服务器端的实现:
客户端代码:
可能有什么问题?
visual-studio-2010 - 将具有一致数组的 IDL 结构转换为标头
我需要通过具有一致数组的 Microsoft RPC 结构。这就是我在 IDL 中的编写方式:
生成的标头:
为什么 achArray 的长度固定为 1?如何将具有例如 10 个元素的数组传递给它?
python - 如何修复 MIDL 生成的 Typelib?
我正在尝试在此页面中使用 IDL 生成 INetCfg 接口的类型库,如下所示:
不幸的是,生成的 IDL 仍然无法从 comtype 加载,代码如下:
它给出了这个错误WindowsError: [Error -2147312566] Error loading type library/DLL
如何修复此错误?我正在使用 Windows 7 64 位和 Python 27 64
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”后立即停止。
idl - 编译使用 OleView 创建的 IDL 时出现问题
为了更正枚举值名称的问题,在搜索之后,我需要修改我的 DLL 的 TLB 文件。我需要做的第一步是创建 IDL 文件。所以我使用 Oleview 创建文件。在进行修改以纠正我的问题之前,我决定尝试编译 IDL 文件。这给了我错误:
搜索问题后,我发现这个问题是纠正错误的方法。所以我改变了地方的枚举定义,现在我得到了这个错误:
我不知道是什么导致了错误,因为我只反转了我的枚举定义和函数定义。是什么导致我的文件中的最后一个错误?
c++ - Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针
我正在使用 MIDL 协议(RPC),我试图通过引用分配的 unsigned char 内存来传递指针。但只有数组的第一个属性填充了正确的值。
中间代码:
服务器代码:
客户端代码:
输出:
我如何通过引用传递所有数组?
c# - E_INVALIDARG 异常将 UDT 的 SAFEARRAY 从 Managed 传递到 COM
类似的问题在这里发布了很多次,但我不知道为什么我会得到这个 COM 异常。
我有一个 IDL 文件,例如:
现在, TMask 结构包含一个 TAction 字段。
我用 tlbimp(不带 /sysarray arg)创建了一个互操作组件,IDecoToniConfig.set_Masks() 的签名是:
但是当我从 c# 端调用它时,使用:
我得到:
为什么?