【问题标题】:Assinging unsigned long (from C++) to long (Java) in CORBA client/server app?在 CORBA 客户端/服务器应用程序中将 unsigned long(来自 C++)分配给 long(Java)?
【发布时间】:2012-09-07 21:23:32
【问题描述】:

在服务器端,我有返回 unsigned long 值的函数(服务器是用 C++ 编写的),可以说:

class Sth {

private:
   CORBA::ULong u;
public:
   CORBA::ULong get()
   {
    return this.u;
   }

};

如何将(在客户端)从服务器返回的值分配给变量?我的意思是,Java 中没有 unsigned long ... 可以将它分配给 long 吗?像这样:

// corba client stuff
long var = server_obj.get();

可以吗?

【问题讨论】:

  • 你能澄清你的问题吗?文中指的是unsigned long,但C++代码使用的是Long,Get方法返回void。
  • @Éric Malenfant:好的,我编辑了我的代码
  • 当然你可以把返回值映射成long,但是corba的东西之前已经把它转换成int了。

标签: java c++ type-conversion corba


【解决方案1】:

您必须查看 IDL 映射。 unsigned long 的 OMG IDL 映射到 C++ 中的 CORBA::ULong 和 Java 中的 int。有关 CORBA 语言映射的更多信息,请参阅 IDL to Java MappingIDL to C++ Mapping

【讨论】:

    【解决方案2】:

    尝试在 java 中使用 BigInteger 类而不是 long。没有其他方便的方法可以进行这种转换。

    【讨论】:

    • ULong 在 Java 中被映射为 int
    【解决方案3】:

    在许多情况下,您知道 unsigned long 永远不会超过 2^31,也就是 MAX_LONG。那么在 Java 中使用 long 就可以了。

    在其他一些情况下,实际值几乎没有意义,只要它们是唯一的,例如某种手柄。同样,您可以使用 jlong​​。

    在其他情况下,Java 仅用作中间体,如果从 C 到 Java 到 C 的转换是正确的,那么您不必关心途中是否存在有符号/无符号不匹配。

    但如果上述异常都不成立,您应该使用 BigInteger 或重新发明它(坏主意

    【讨论】:

    • ULong 在 Java 中被映射到 int
    • 我的理解是@mazix会自己实现Android端,不会重用一些Java CORBA适配器。
    • 哪个安卓?不适合构建 CORBA 适配器并询问基本的 CORBA 问题。
    • 对不起,s/Android/client/。我的错。
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2012-01-27
    • 2015-10-18
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多