问题标签 [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.
c++ - 在不重新编译的情况下更改 CORBA 接口
我想向现有服务器的 CORBA 接口添加一个方法。这需要重新编译所有客户端吗?
我正在使用TAO。
vb6 - 为 MAPI-MIME 转换创建 IDL
我正在尝试为 IConverterSession 接口创建 IDL,但我对MIMETOMAPI方法的定义感到困惑。它将LPMESSAGE pmsg
参数指定为 [out] 但注释声明它指向要加载的 MAPI 消息的指针。
我不清楚这些函数是否分配了 MAPI 消息对象并设置了指针,在这种情况下它不应该是指向 MESSAGE 指针的指针吗?或者调用代码是否应该已经实例化了消息对象,在这种情况下为什么标记为 [out] 而不是 [in]?
Utlitmately 这个接口将从 VB6 代码中使用,因此它必须是 [in] 或 [in, out] 但我确实需要知道是否在我使用的 IDL 中:-
或者
com - IDL 枚举未显示在类型库中
我有一个使用 MS ATL 库编写的 COM 对象。我在 IDL 中声明了一堆枚举,但在使用 MS COM 对象查看器工具查看类型库时它们不会出现。问题似乎是缺少的枚举实际上并没有被任何 COM 方法用作参数 - 我怎样才能强制这些枚举出现?
例如,在 IDL 中:
即使有问题的枚举没有被任何方法直接使用,它们仍然对使用该对象的任何人有用,但我无法让它们导出。
有没有人见过这个?
c++ - __REQUIRED_RCNDR_H_VERSION__
我从 IDL 创建一个头文件。IDL 文件已在 Visual C++ 2005 中编译。生成的头文件包含 #define REQUIRED_RPCNDR_H_VERSION 475 。
我试图在 Visual Studio 2003 中使用这个头文件,其中 rpcndr.h 包含
{
#define RPCNDR_H_VERSION ( 450 ) // 和
#if ( RPCNDR_H_VERSION < REQUIRED_RPCNDR_H_VERSION )
}
由于 450<475 ,我得到一个编译时错误。有什么办法可以在 Visual Studio 2003 中使用头文件。我需要更改 idl 文件的编译设置吗?
PS:我只需要在 Visual C++ 2005 中编译 idl 文件。(我没有选择在 VS 2003 中编译它)。
c# - 用于从 C# 获取 C 样式数组的函数的 IDL 声明(在 C++ 中)
我正在使用由一些用 C++ 编写的带有 C# 前端的 COM 接口组成的现有代码库。有一些新功能需要添加,所以我不得不修改 COM 部分。在一种特殊情况下,我需要将一个数组(从 C# 分配)传递给要填充的组件。
我想做的是能够将一个 int 数组从 C# 传递给该方法,例如:
几个扳手在工作:
- 不能使用 C++/CLI 或托管 C++(在这种情况下可以取消 COM)。
- C# 端不能用 /unsafe 编译(允许使用 Marshal)。
COM 接口仅由 C# 部分使用(将永远使用),因此我不太关心与其他 COM 使用者的互操作性。32 位和 64 位之间的可移植性也不是问题(一切都在 32 位机器上编译和运行,因此代码生成器正在将指针转换为整数)。最终,它将被 C++/CLI 取代,但这还有很长的路要走。
我最初的尝试
类似于:
并且输出 TLB 定义是(似乎合理):
这是由 C# 导入的(不太合理):
我可以用它
...除了我不能用 /unsafe 编译。
在这一刻
我在用:
其中导入为:
我需要像这样使用它:
哪个有效...,但我想找到一种更清洁的方法。
所以,问题是
对于这种情况,是否存在对从 TLB 生成器导入 C# 友好的 IDL 定义?如果没有,在 C# 端可以做些什么来让它更安全一点?
c# - 在 C# 中为客户端和服务器使用 C++ COM 接口
我需要让一段 C# 代码通过 COM 与各种实现进行交互。
为了使该集成的用户更容易,我在 IDL 中包含了交互接口(作为相关现有 DLL 的一部分,但没有 coclass 或实现),然后通过运行 Tlbimp 将其放入我的 C# 代码中以创建类型定义。
我实现了我的 C#,基于 Windows 注册表信息创建 COM 对象并将对象转换为我需要的接口。
然后我在一个单独的项目中创建了接口的 C# 实现并注册了它。主程序正确创建了测试 COM 对象,但未能将其转换为接口(使用 C#'as' 时获取空对象,获取显式转换的 InvalidCastException)。
有人可以建议为什么接口没有被测试对象识别为实现吗?
这是 IDL 中的接口定义(在 VS 2005 中用 C++ 编译):
这是 Tlbimp 为 C# 创建的存根:
这是主要 C# 代码的一部分,通过其 ProgID 创建一个 COM 对象并将其转换为 IScriptGenerator 接口:
这是实现 C# 代码,以测试它是否正常工作(但它不是):
idl - 如果 typedef 使用未知类型,Microsoft MIDL 不会报告错误,这是一个错误吗?
我想知道我是否遗漏了什么:
当我使用以下命令编译 test.idl 时:
我得到这个输出
我得到一个错误的 test.h (在这条消息的底部),它只有
其中未知的 foo 类型被静默丢弃。
我本来预计会出现一条错误消息,说明“foo 是未知类型”,我错了吗?
我是否需要将任何特定参数传递给 MIDL 命令?
我使用 MIDL 编译器版本 7.00.0500 得到了相同的结果
com - 使用 IDL 定义纯基类
当我在 IDL 中定义一个不从任何东西派生的接口时,MIDL 预编译器会发出警告(Visual C++ 2008):
警告 MIDL2271:[object] 接口必须派生自另一个 [object] 接口,例如 IUnknown (...)
如果我从另一个不是从 IUnknown 派生的接口派生我的接口,MIDL 将失败:
错误 MIDL2257:只有 IUnknown 可以用作根接口(...)
现在,我的问题是:这是 COM 或 MIDL 预编译器的限制吗?
我最近一直在看D3D10的头文件,d3d10.h显然是使用IDL生成的(MIDL为此添加了注释)。并且所有接口都以一种或另一种方式派生自 IUnknown。
但是,外围头文件(d3d10shader.h、d3d10effect.h 等)包含手动定义的 COM 接口,其中一些会触发此处描述的警告或错误。我只能假设他们必须手动定义它们以避免这些限制。
我对吗?为什么 MIDL 会阻止纯接口?
c++ - 预定义的 IDL 文件中没有类型定义
首先,
使用纯C++,没有 ATL,MFC 试图使用 COM 对象接口。
使用oleview (OLE/COM Object viewer) - 用于设计 IDL 代码。
在这个阶段,使用MIDL编译器,现在我在尝试生成以下内容时遇到了麻烦:
cmd行上的语法:
midl /nologo /env win32 /tlb ".\S8_.tlb" /h ".\S8_.h" /iid ".\S8_i.c" S8.idl
- 对应的 .TLB(类型库)
- A .H(标题)
- IID 定义包含文件 (*_i.c)
- 代理 (*_p.c)
MIDL 编译器错误:
S8.IDL(513):错误 MIDL2025:语法错误:期望“S8SimObject”附近的类型规范
c++ - 编辑由 OLE 视图为 C++ 组件创建的 IDL
执行此操作时我需要考虑哪些事项:
- 删除/操作/添加什么
问候