CORBA IDL 到 C++ - 字符与无符号字符?

Posted

技术标签:

【中文标题】CORBA IDL 到 C++ - 字符与无符号字符?【英文标题】:CORBA IDL to C++ - char vs. unsigned char? 【发布时间】:2014-02-13 18:14:36 【问题描述】:

我们将 OmniORB 与我们的 C++ 服务器一起使用。目前,当一个对象在 IDL 文件中被指定为 char 时,它在 C++ 中被转换为 unsigned char。我们希望它只是char。我们可以改变什么来实现这一点吗?

【问题讨论】:

是的,将编译器配置为默认将 char 视为无符号(即-funsigned-char)。 “我可以将 CORBA IDL 更改为 C++ 映射吗”—— 90 年代后期成千上万的 C++ 程序员所说的一句话。 我不知道 OmniORB 的详细信息,但 TAO(请参阅 download.dre.vanderbilt.edu)确实使用 C++ 字符类型作为 IDL 字符。关于更改 IDL 映射,看看新的 IDL 到 C++11 语言的映射,它实现了人们谈论已久的映射(见omg.org/spec/CPP11),我们将其作为 TAOX11 的一部分实现(见@ 987654323@). 【参考方案1】:

IDL 类型 booleancharoctet 映射到的内容由实现定义 (page 15 in the spec)。

omniORB chooses to:

...
typedef unsigned char _CORBA_Char;
typedef unsigned char _CORBA_Octet; 
...

您可以更改 omniORB 来源,但我怀疑这不是个好主意。或者您可以接受 CORBA::Char 不代表 C++ char 类型。

【讨论】:

【参考方案2】:

在调用直接 CORBA 调用的函数并分配此类函数的返回值时,我建议使用 CORBA::Char

如果您需要将它们转换为“char”或“unsigned char”,static_cast 应该可以完成这项工作。

【讨论】:

以上是关于CORBA IDL 到 C++ - 字符与无符号字符?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse Kepler CORBA 插件不会编译 IDL 文件

传递数组或序列以在 idl Java Corba 中运行

CORBA:CORBA IDL 类型可以是另一个属性吗?

从 Java 源文件生成 CORBA IDL?

将 rmi 接口转换为 CORBA .idl

CORBA IDL 哈希图