1

サーバー側には、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();

大丈夫ですか?

4

3 に答える 3

4

そのためには、IDL マッピングを確認する必要があります。C++ およびJava にunsigned longマップされた OMG IDL の。CORBA 言語マッピングの詳細については、IDL から Java へのマッピングおよびIDL から C++ へのマッピングを参照してください。CORBA::ULongint

于 2012-09-18T10:10:51.843 に答える
0

多くの場合、unsignedlongが2^ 31、別名MAX_LONGを超えることはありません。次に、Javaでlongを使用することは問題ありません。

他のいくつかのケースでは、実際の値は、それらが一意である限り、ほとんど意味がありません。たとえば、ある種のハンドルです。ここでも、jlong​​を使用できます。

さらに他の場合では、Javaは中間としてのみ使用され、CからJava、Cへの変換が正しければ、途中で符号付き/符号なしの不一致があったことを気にする必要はありません。

ただし、上記の例外のいずれにも当てはまらない場合は、BigIntegerを使用するか、再発明する必要があります(悪い考え

于 2012-09-14T18:16:29.690 に答える
0

long の代わりに Java で BigInteger クラスを使用してみてください。その変換を行う便利な方法は他にありません。

于 2012-09-14T17:34:05.213 に答える