问题标签 [idl]

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 回答
6152 浏览

corba - CORBA IDL 输入、输出和输入

CORBA IDL 函数参数中的 in、out 和 inout 究竟是什么意思?

0 投票
2 回答
1427 浏览

c++ - 如何在 IDL 中声明类构造函数?

IDL 中的类构造函数是如何定义的?

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 投票
1 回答
1090 浏览

c# - 向 COM 公开类似索引器的属性

我有现有的 COM 接口。我不想创建将新接口公开为 COM(具有新 GUID)的 .net 程序集,但接口的结构需要相同。

如何创建公开此接口的 .net 类(C#)?

0 投票
1 回答
8706 浏览

com - 如何将 .tlb 文件转换为头文件和实现文件?

我正在尝试转换 mscorlib.tlb。它通常在 C++ 中这样使用:

如何将其转换为头文件和实现文件?

我能够使用 Visual Studio 编译一个包含上述行的虚拟 cpp 文件,并生成一个 .tlh 文件。不应该还有实现文件吗?

0 投票
1 回答
262 浏览

eclipse - 没有编译的EclipseCORBA?

我正在使用 EclipseCORBA,但主要是为了语法高亮。我想知道是否有办法关闭 IDL 编译器。原因是它不会在我的 IDL 文件中显示有效错误。

EclipseCORBA 的替代 Eclipse 插件用于突出显示 IDL 文件的语法(最好是带有格式化程序的插件 :> )也是受欢迎的。:)

0 投票
2 回答
1686 浏览

.net - 创建仅包含枚举的 COM 库的问题

我正在做一个 COM 互操作项目。用 C# 和 .NET Interop 替换一些 VB 和 C++ ATL COM 项目。当我在 .NET 中定义枚举并将它们设为 ComVisible 时,它​​们会暴露为 Typelib.EnumType_EnumValue 而不仅仅是 Typelib.EnumValue。typelib 导出器这样做是为了确保值名称是唯一的。但我知道我所有的枚举都是独一无二的,所以我不想要下划线。如果我不去掉下划线,还有很多客户端代码需要修改。

为了找到这个问题的解决方案,我在 IDL 文件中定义了枚举,并从中创建了一个 typelib 和 .Net 互操作。

我用 MIDL.exe 创建了一个类型库,它生成一个 tlb 文件。

我用 tlbimp.exe 创建了一个程序集。使用与其他互操作程序集相同的密钥对程序集进行签名。

tlbimp OpenStructureAdapterEnum.tlb /keyfile:KeyFile.snk

然后我用 regasm.exe 注册程序集 这个程序集看起来很好,并且包含没有下划线的枚举。但问题是无法从 OLE/COM 对象查看器或 VBA 或 VB6 中看到 COM 库。当我从另一个公开的 COM 程序集中引用枚举时,包含对枚举的引用的接口部分将作为受限方法公开。

如何创建一个只包含枚举(没有下划线)并从其他 .net Interop 程序集中引用这些的 COM 库?

0 投票
2 回答
1129 浏览

c# - 在 C# COM 中处理 NULL 指针输出参数

我正在使用具有以下函数定义的 COM 插件接口:

使用 tlbimp(来自 codeplex 的 tlbimp2.exe)时,.NET 库具有以下接口函数:

问题是调用应用程序将进行函数调用:

在 C# 中我实现了这个功能:

当一切都说完了,应用程序实际上得到了一个 E_POINTER 返回,而不是 S_OK。我认为这是因为 NULL 传递了 out 参数。

有没有办法在 C# 实现中检查地址指针是否为 NULL?

注意:out 参数未初始化,因此您根本无法使用这些参数。

我尝试将接口实现为 [in, out, ref] 以强制 C# 使用( ref object a, ref object b ),但这也不起作用。

更新

Hans 是绝对正确的,如果我们将其声明为 [out,ref],我们应该使用 NULL ptr 调用该函数。

erurainon 也是正确的,我们可以使用 IntPtr 来获取 Variant*。

所以这里是如何修复它:

变成了

现在我们可以使用以下方法测试 NULL 情况:

但是,由于我们正在处理 Variant,您不能只将值复制到 IntPtr,例如:

因此,在这篇文章之后,您需要创建一个结构类:

最终函数如下所示:

希望这对将来的其他人有所帮助

0 投票
0 回答
1226 浏览

.net - 简单设置中的“类型库导入器无法转换成员的签名”警告

观察这个最简单的 IDL 文件:

这是我的编译方式:

注意 TlbImp 警告。生成的互操作程序集是:

属性的存在ComConversionLoss让我感觉很糟糕,所以我的问题是如何摆脱这个警告?

PS 我的问题可能与什么原因导致“类型库导入器无法转换成员的签名”警告完全相同?. 但是,事实并非如此,因为我在命令行上编译并且警告不会在任何地方消失。

0 投票
2 回答
1637 浏览

c++ - 仅使用 IDL 文件注册 COM 对象

我有一个第三方IDL文件,它在编译时会生成一个头文件和一个 _i.c 文件。所有这三个文件都是 Visual Studio 2010 项目的一部分。(到目前为止,除了尝试的 COM 初始化内容之外,该项目是空的。)

我可以通过调用来编译项目

在运行时 CoCreateInstance() 返回“类未注册”错误。

我在 Internet 上找到的所有内容都说通过在 DLL 文件或 EXE 文件上运行 regsvr32 来注册 COM 对象。但是我只有一个 IDL 文件。我尝试注册项目生成的 EXE 文件,但我收到一条错误消息,提示“模块已加载但未找到入口点 DLLRegisterServer”。

老实说,我不确定还能尝试什么。