エンコード/デコード |
CORBA2.0以降の仕様として、送信されるデータはある規則にしたがったバイト列に変換する必要があります(マーシャリングもしくはエンコード)。逆に受信したデータをもとの型に戻す必要があります(アンマーシャリングもしくはデコード)。この送受信に使われるデータの表現方法のことを共通データ表現(CDR:Common Data Reprecentation)といいます。また、CDRにencapsulationという手法があります。これはCDRのデータの先頭にバイトオーダを付け、 データをoctetのシーケンスにカプセル化するためのものです。 下記のクラスはこれらの操作を簡単に行うために用意されています。
4.4.7.2. Ob_MesBufクラス |
このクラスはマーシャリング/アンマーシャリング(エンコード/デコード)を行います。また、マーシャリング(エンコード)されたデータを貯えているバッファに関する処理も行えます。
一般的なアプリケーションではOb_MesBuf型を使う必要はありません。したがって、これらの機能を使うことはありません。
Ob_MesBuf | エンコード用コンストラクタ |
Ob_MesBuf(unsigned long) | デコード用コンストラクタ |
Ob_MesBuf(const Ob_MesBuf&) | コピーコンストラクタ |
operator=(const Ob_MesBuf&) | 代入オペレータ |
operator<<=(<basic type>) | エンコーダ |
operator>>=(<basic type>&) | デコーダ |
used_size | 現在使われているバイト長 |
reset | カレントポインタを先頭に戻す |
dump | エンコードされたデータをファイルにダンプする |
buf_copy_to | バッファへコピーする |
buf_copy | バッファからコピーする |
begin_encode_message | エンコード開始処理 |
end_encode_message | エンコード終了処理 |
begin_decode_message | デコード開始処理 |
end_decode_message | デコード終了処理 |
begin_encode_encapsulation | encapsulationエンコード開始処理 |
end_encode_encapsulation | encapsulationエンコード終了処理 |
begin_decode_encapsulation | encapsulationデコード開始処理 |
end_decode_encapsulation | encapsulationデコード終了処理 |
to_any_value | untyped型を返す |
from_any_value | untyped型を受ける |
get_trans_codeset | string型のトランスミッションコードセットIdの設定値を取り出す |
set_trans_codeset(CONV_FRAME_CodeSetId) | string型のトランスミッションコードセットIdの設定値を設定する |
get_trans_codeset_w | wchar/wstring型のトランスミッションコードセットIdの設定値を取り出す |
set_trans_codeset_w(CONV_FRAME_CodeSetId) | wchar/wstring型のトランスミッションコードセットIdの設定値を設定する |
Ob_MesBuf::Ob_MesBuf - エンコード用コンストラクタ
#include <orb.h> Ob_MesBuf::Ob_MesBuf();
各型のデータをCDRに基づいてエンコードするためのインスタンスを生成するときに使用します。
例)
Ob_MesBuf mb; // エンコード用オブジェクトの生成 if (mb.is_error()) { // エラーのチェック // エラー処理 } CORBA::Long l = 100; mb <<= l; // lをエンコードする
ありません。
is_error関数を呼んだ結果が1のとき、メモリ不足のため初期化に失敗しています。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
このコンストラクタはエンコード用ですので、デコード用として使ったときは、正常に動作しません。
Ob_MesBuf::Ob_MesBuf(unsigned long) − デコード用コンストラクタ
#include <orb.h> Ob_MesBuf::Ob_MesBuf(unsigned long size);
各型のデータをCDRに基づいてデコードするためのインスタンスを生成するときに使用します。sizeはデコードするバイト配列の長さを指定します。デコード用コンストラクタは、size分の領域を確保します。
例)
CORBA::Octet buffer[1024]; // CDRのデータが入っているとする Ob_MesBuf mb(1024); // デコード用オブジェクトの生成 if (mb.is_error()) { // エラーのチェック // エラー処理 } mb.buf_copy(buffer, 1024); // bufferからmbにデータをコピーする CORBA::Long l; mb >>= l; // CORBA::Long型のデータをデコードする
ありません。
is_error関数を呼んだ結果が1のとき、メモリ不足のため初期化に失敗しています。
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
このコンストラクタはデコード用ですので、エンコード用として使ったときは、正常に動作しません。
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&) - コピーコンストラクタ
Ob_MesBuf::operator=(const Ob_MesBuf&) - 代入オペレータ
#include <orb.h> Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&); Ob_MesBuf& Ob_MesBuf::operator=(const Ob_MesBuf&);
コピーコンストラクタも代入オペレータも、内部的に管理しているバイト配列をコピーします。
例)
Ob_MesBuf mb1, mb2; if (mb1.is_error() || mb2.is_error()) { // エラー処理 } mb1 <<= (CORBA::ULong)10; mb1 <<= (const char*)"abc"; mb2 = mb1; mb2 <<= CORBA::_tc_Short; Ob_MesBuf mb3(mb2); if (mb3.is_error()) { // エラー処理 } mb3 <<= (CORBA::Char)'A';
コピーコンストラクタは戻り値はありません。
代入オペレータは自分自身への参照を返します。
is_error関数を呼んだ結果が1のとき、メモリ不足のため初期化に失敗しています。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::operator<<=(<basic type>)
Ob_MesBuf::operator<<=(const <class type>&)
Ob_MesBuf::operator<<=(Ob_MesBuf&, const <class type>&)
- エンコーダ
#include <orb.h> CORBA::Boolean Ob_MesBuf::operator<<=(<basic type> value); - 基本型用 CORBA::Boolean Ob_MesBuf::operator<<=(const <class type>& value); - 既存クラス用 CORBA::Boolean Ob_MesBuf::operator<<=(Ob_MesBuf& mb, const <class type>& value); - ユーザ定義型用
valueにはCDRに基づいてエンコードするデータを指定します。IDL基本型および既知型に対するエンコーダはOb_MesBufクラスで定義されています。IDLユーザ定義型に対するエンコーダはIDLコンパイラによって生成されます。
例)
Ob_MesBuf mb; // エンコード用オブジェクトを生成する mb <<= (CORBA::ULong)1000; // 1000をエンコードする if (mb.is_error()) { // エラー処理 } mb <<= (const char*)"abcdefg"; // "abcdefg"をエンコードする if (mb.is_error()) { // エラー処理 }
エンコードが成功したら1が返り、失敗したら0が返ります。
is_error関数を呼んだときに1が返ります。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value,
Ob_MesBuf::operator>>=(<basic type>&)
Ob_MesBuf::operator>>=(<class type>&)
Ob_MesBuf::operator>>=(Ob_MesBuf&, <class type>&)
- デコーダ
#include <orb.h> CORBA::Boolean Ob_MesBuf::operator>>=(<basic type>& value); - 基本型用 CORBA::Boolean Ob_MesBuf::operator>>=(<class type>& value); - 既存クラス用 CORBA::Boolean Ob_MesBuf::operator>>=(Ob_MesBuf& mb, <class type>& value); - ユーザ定義型用
valueにはCDRに基づいてデコードするデータ型のオブジェクトを指定します。IDL基本型および既知型に対するエンコーダはOb_MesBufクラスで定義されています。IDLユーザ定義型に対するエンコーダはIDLコンパイラによって生成されます。
右辺が文字列型、TypeCode, Principal, Objectおよびインターフェース型のときは、呼び出し側が右辺の指す領域を解放します。
例)
Ob_MesBuf mb(1024); // デコード用オブジェクトを生成する ...; // mbにデコードされたデータをセットする CORBA::ULong l; CORBA::String_var str; mb >>= l; // CORBA::ULong型のデータをデコードする if (mb.is_error()) { // エラー処理 } mb >>= str; // 文字列型のデータをデコードする。呼び出し側が文字列を解放する if (mb.is_error()) { // エラー処理 }
デコードが成功したら1が返り、失敗したら0が返ります。
is_error関数を呼んだときに1が返ります。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value,
Ob_MesBuf::used_size - 先頭から現在使われている場所までのバイト長
#include <orb.h> CORBA::ULong Ob_MesBuf::used_size();
Ob_MesBufオブジェクトが内部的に管理しているバイト配列のうち、先頭から現在使われている場所までのバイト長を返します。Ob_MesBufオブジェクトを生成した直後や、reset関数を呼び出した直後は0を返します。
例)
Ob_MesBuf mb; // エンコード用オブジェクトの生成 mb <<= (CORBA::Long)100; // データのエンコード CORBA::ULong len = mb.used_size(); // バイト長を得る CORBA::Octet* buffer = new CORBA::Octet[len]; mb.buf_copy_to(buffer, len); // bufferにエンコードデータをコピーする
先頭から現在使われている場所までのバイト長をCORBA::ULong型で返します。
起こりません。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::reset - カレントポインタを先頭に戻す
#include <orb.h> void Ob_MesBuf::reset();
Ob_MesBufが内部的に管理しているバイト配列へのカレントポインタを、先頭に戻します。バッファに書かれているデータは変更されません。また、reset関数を実行後のused_size関数の戻り値は0になります。
例)
Ob_MesBuf mb; // エンコード用オブジェクトの生成 CORBA::Long l1 = 100, l2; mb <<= l1; // l1をエンコードする mb.reset(); // カレントポインタを先頭に戻す mb.begin_decode_message(4, 0); // デコード開始処理 mb >>= l2; // CORBA::Long型のデータをデコードする mb.end_decode_message(); // デコード終了処理
ありません。
起こりません。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::dump - エンコードされたデータをファイルにダンプする
#include <orb.h> void Ob_MesBuf::dump(const char* filename);
Ob_MesBuf::dumpはエンコードされたデータを指定されたファイルにダンプします。この関数は、フック関数等のデバッグ時に、エンコードされたデータの内容をファイルに保存するときなどに利用します。ダンプは、16進数とキャラクタの形式で追記されます。
filenameにはデータをダンプするファイル名を指定します。ファイル名は実在するファイル名でなければなりません。はじめて利用するときには、出力させるためのファイルを作成しておく必要があります。ファイルが存在しない場合は何も出力されません。
例)
Ob_MesBuf mb; ...; // データをエンコードする md.dump("dump.log"); // dump.logにダンプする
ありません。
起こりません。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
本関数を呼び出すと、指定したファイルが存在すれば上書きしてしまいます。少なくとも、ファイル名は開発したアプリケーションを利用するユーザが付けそうにない名前にすべきですが、最終的な物件を作成するまでに本関数を取り除いてしまうほうがよいでしょう。
Ob_MesBuf::buf_copy_to - バッファにCDRエンコードデータをコピーする
#include <orb.h> CORBA::Boolean Ob_MesBuf::buf_copy_to(void* to, CORBA::ULong size);
toにsize分の長さのCDRエンコードデータをコピーします。sizeは実際のデータ長(used_size関数の結果)以下の値を指定してください。もし、実際のデータよりもsizeの方が大きいときはエラーになります。また、toの指す領域がsizeよりも小さいときの動作は保証しません。
例)
Ob_MesBuf mb; // エンコード用オブジェクトの生成 mb <<= (CORBA::Long)100; // データのエンコード CORBA::ULong len = mb.used_size(); // バイト長を得る CORBA::Octet* buffer = new CORBA::Octet[len]; mb.buf_copy_to(buffer, len); // bufferにエンコードデータをコピーする if (mb.is_error()) { // エラー処理 }
正常終了したときは1を返し、エラーが起きたときは
0を返します。
Ob_MesBufの実際のデータ長(used_size関数の結果)よりsizeの方が大きいときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::buf_copy - CDRデコードデータをバッファからコピーする
#include <orb.h> CORBA::Boolean Ob_MesBuf::buf_copy(void* from, CORBA::ULong size);
fromからsize分の長さのCDRデコードデータをコピーします。fromの指す領域がsizeよりも小さいときの動作は保証しません。
例)
CORBA::Octet buffer[1024]; ...; // bufferにエンコードデータを入れる Ob_MesBuf mb(1024); // デコード用オブジェクトを生成する mb.buf_copy(buffer, 1024); // mbにバッファのデータをコピーする if (mb.is_error()) { // エラー処理 } CORBA::Long l; mb >>= l; // CORBA::Long型としてデータをデコードする
正常終了したときは1を返します。エラーが起きたときは0を返します。
メモリ不足のときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::begin_encode_message, Ob_Mesbuf::end_encode_message
- エンコード開始および終了処理
#include <orb.h> CORBA::Boolean Ob_MesBuf::begin_encode_message( CORBA::ULong* size_ptr ); CORBA::Boolean Ob_MesBuf::end_encode_message();
Ob_MesBufオブジェクトをエンコード用として使うとき、この2つの関数を使います。begin_encode_message関数を呼び出したときのカレントポインタからend_encode_message関数を呼び出したときのカレントポインタまでがエンコードされます。この間に使われたOb_MesBuf内のバイト配列のバイト数は、end_encode_message関数を呼び出したときにbegin_encode_messageで渡したsize_ptrの指す領域に書き込まれます。
例)
CORBA::ULong func(Ob_Mesbuf& mb) { CORBA::ULong len; mb.begin_encode_message(&len); // エンコード開始処理 if (mb.is_error()) { // エラー処理 } mb <<= ...; // エンコード mb.end_encode_message(); // エンコード終了処理 if (mb.is_error()) { // エラー処理 } // lenにバイト数が書き込まれる return len; }
正常終了したときは1を返します。エラーが起きたときは0を返します。
メモリ不足のときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message
- デコード開始および終了処理
#include <orb.h> CORBA::Boolean Ob_MesBuf::begin_decode_message( CORBA::ULong size, CORBA::Boolean byte_order ); void Ob_MesBuf::end_decode_message();
Ob_MesBufオブジェクトに格納されているデータをデコードするとき、この2つの関数を使います。begin_decode_message関数を呼び出したときのカレントポインタから、end_decode_message関数を呼び出したときのカレントポインタまでをデコードできます。
sizeにはデコードするバイト長を指定します(現在使われていません)。
byte_orderにはメッセージのバイトオーダを指定します。
ビッグエンディアンならば1を、リトルエンディアンならば0を指定します。
例)
void func(Ob_MesBuf& mb) { mb.begin_decode_message(10, 1); // デコード開始処理 if (mb.is_error()) { // エラー処理 } mb >>= ...; // デコード mb.end_decode_message(); // デコード終了処理 if (mb.is_error()) { // エラー処理 } }
begin_decode_message関数は、正常終了したとき1を返します。
エラーのときには0を返します。
メモリ不足のときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation
- encapsulation形式のエンコード開始および終了処理
#include <orb.h> CORBA::Boolean Ob_MesBuf::begin_encode_encapsulation( CORBA::ULong* size_ptr ); CORBA::Boolean Ob_MesBuf::end_encode_encapsulation();
Ob_MesBufオブジェクトをencapsulationという手法を用いたエンコード用として使うとき、この2つの関数を使います。begin_encode_encapsulation関数を呼び出したときのカレントポインタからend_encode_encapsulation関数を呼び出したときのカレントポインタまでがencapsulationの形式にエンコードされます。この間に使われたOb_MesBuf内のバイト配列のバイト数は、end_encode_ncapsulation関数を呼び出したときにbegin_encode_ncapsulationで渡したsize_ptrの指す領域に書き込まれます。
例)
Ob_MesBuf mb; CORBA::ULong len; mb.begin_encode_encapsulation(&len); // encapsulationエンコード開始処理 if (mb.is_error()) { // エラー処理 } mb <<= ...; // エンコード mb.end_encode_encapsulation(); // encapsulationエンコード終了処理 if (mb.is_error()) { // エラー処理 }
begin_encode_encapsulation関数は、正常終了したとき1を返します。エラーが起きたときは0を返します。
メモリ不足のときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation
- encapsulation形式のデコード開始および終了処理
#include <orb.h> CORBA::Boolean begin_decode_encapsulation(CORBA::ULong len); void end_decode_encapsulation();
Ob_MesBufオブジェクトに格納されているencapsulationの形式のデータをデコードするとき、この2つの関数を使います。begin_decode_encapsulation関数を呼び出したときのカレントポインタからend_decode_encapsulation関数を呼び出したときのカレントポインタまでをencapsulationの形式でデコードできます。
lenにはデコードするバイト数を指定してください(現在使われていません)。
例)
Ob_MesBuf mb; mb.begin_decode_encapsulation(10); // encapsulationデコード開始処理 if (mb.is_error()) { // エラー処理 } mb >>= ...; // デコード mb.end_decode_encapsulation(); // encapsulationデコード終了処理 if (mb.is_error()) { // エラー処理 }
begin_decode_encapsulationは、正常終了したとき1を返します。エラーのときには0を返します。
メモリ不足のときエラーを返します。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::to_any_value, Ob_MesBuf::from_any_value
Ob_MesBuf::to_any_value - CORBA::Anyに入れるuntyped valueを作成する
#include <orb.h> void* Ob_MesBuf::to_any_value( CORBA::Environment& env = Ob_default_environment() );
IDL定義していない型のオブジェクト(untyped value)をCORBA::Anyオブジェクトに入れるときに、この関数を使います。untyped valueはCDR方式でエンコードされた形でCORBA::Anyに入れることができます。
envは、関数を呼び出した後、例外の有無を調べるために指定します(オプション)。
例)
IDL定義でstruct T { long l; string s; };型をCORBA::Anyに入れたいとき。
// C++ CORBA::Long l = ...; const char* s = ...; Ob_MesBuf mb; mb <<= l; mb <<= s; CORBA::ORB_var orbobj = ...; CORBA::TypeCode_var type = orbobj->create_struct_tc(...); // Tのタイプコードを生成する CORBA::Any any(type, mb.to_any_value(), 1);
正常終了したとき、untyped valueへのポインタを返します。
CORBAの標準例外がthrowされます。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::from_any_value - CORBA::Anyからuntyped valueを取り出す
#include <orb.h> void Ob_MesBuf::from_any_value( const void* value, CORBA::Environment& env = Ob_default_environment() );
IDL定義していない型のオブジェクト(untyped value)をCORBA::Anyオブジェクトから取り出すときに、この関数を使います。untyped valueはCDR方式でエンコードされた形でCORBA::Anyに入っています。
envは、関数を呼び出した後、例外の有無を調べるために指定します(オプション)。
例)
IDL定義でstruct T { long l; string s; };型がanyにuntyped valueとして入っているとき。
// C++ CORBA::Any any; // untyped valueが入っているとする Ob_MesBuf mb; mb.from_any_value(any.value()); CORBA::Long l; CORBA::String_var s; mb >>= l; mb >>= s;
ありません。
CORBAの標準例外がthrowされます。
Ob_MesBuf::Ob_MesBuf(unsigned long),
Ob_MesBuf::Ob_MesBuf(const Ob_MesBuf&),
Ob_MesBuf::operator=(const Ob_MesBuf&),
Ob_MesBuf::reset, Ob_MesBuf::used_size, Ob_MesBuf::dump,
Ob_MesBuf::buf_copy_to, Ob_MesBuf::buf_copy,
Ob_MesBuf::operator<<=, Ob_MesBuf::operator>>=,
Ob_MesBuf::begin_encode_message, Ob_MesBuf::end_encode_message,
Ob_MesBuf::begin_decode_message, Ob_MesBuf::end_decode_message,
Ob_MesBuf::begin_encode_encapsulation,
Ob_MesBuf::end_encode_encapsulation,
Ob_MesBuf::begin_decode_encapsulation,
Ob_MesBuf::end_decode_encapsulation,
Ob_MesBuf::get_trans_codeset
- string型のトランスミッションコードセットIdの設定値を取り出す
#include <orb.h> CONV_FRAME_CodeSetId Ob_MesBuf::get_trans_codeset( CORBA_Environment& env = Ob_default_environment() );
IDLのstring型で使用されるトランスミッションコードセットIdの設定値を返します。
トランスミッションコードセットIdが返ります。
CORBAの標準例外がthrowされます。
Ob_MesBuf::set_trans_codeset(CONV_FRAME_CodeSetId)
コードセットを使用するためには、GIOPおよびIIOPのバージョンを1.1以上に設定する必要があります。詳しくは、 [ リファレンス集 運用管理・設定編 > 1. コンフィグレーション(設定一覧) > 1.10. Object Broker > 1.10.3. WebOTX Object Broker C++ における環境設定 ] の表1.10.3.1-8を参照してください。
Ob_MesBuf::set_trans_codeset(CONV_FRAME_CodeSetId)
- string型のトランスミッションコードセットIdを設定する
#include <orb.h> void Ob_MesBuf::set_trans_codeset( CONV_FRAME_CodeSetId csid, CORBA_Environment& env = Ob_default_environment() );
IDLのstring型で使用されるトランスミッションコードセットIdを設定します。
ありません。
CORBAの標準例外がthrowされます。
コードセットを使用するためには、GIOPおよびIIOPのバージョンを1.1以上に設定する必要があります。詳しくは、 [ リファレンス集 運用管理・設定編 > 1. コンフィグレーション(設定一覧) > 1.10. Object Broker > 1.10.3. WebOTX Object Broker C++ における環境設定 ] の表1.10.3.1-8を参照してください。
Ob_MesBuf::get_trans_codeset_w
- wchar/wstring型のトランスミッションコードセットIdの設定値を取り出す
#include <orb.h> CONV_FRAME_CodeSetId Ob_MesBuf::get_trans_codeset_w( CORBA_Environment& env = Ob_default_environment() );
IDLのwchar, wstring型で使用されるトランスミッションコードセットIdの設定値を返します。
トランスミッションコードセットIdが返ります。
CORBAの標準例外がthrowされます。
Ob_MesBuf::set_trans_codeset_w(CONV_FRAME_CodeSetId)
コードセットを使用するためには、GIOPおよびIIOPのバージョンを1.1以上に設定する必要があります。詳しくは、 [ リファレンス集 運用管理・設定編 > 1. コンフィグレーション(設定一覧) > 1.10. Object Broker > 1.10.3. WebOTX Object Broker C++ における環境設定 ] の表1.10.3.1-8を参照してください。
Ob_MesBuf::set_trans_codeset_w(CONV_FRAME_CodeSetId)
- wchar/wstring型のトランスミッションコードセットIdを設定する
#include <orb.h> void Ob_MesBuf::set_trans_codeset_w( CONV_FRAME_CodeSetId csid, CORBA_Environment& env = Ob_default_environment() );
IDLのwchar, wstring型で使用されるトランスミッションコードセットIdを設定します。
ありません。
CORBAの標準例外がthrowされます。
Ob_MesBuf::get_trans_codeset_w
コードセットを使用するためには、GIOPおよびIIOPのバージョンを1.1以上に設定する必要があります。詳しくは、 [ リファレンス集 運用管理・設定編 > 1. コンフィグレーション(設定一覧) > 1.10. Object Broker > 1.10.3. WebOTX Object Broker C++ における環境設定 ] の表1.10.3.1-8を参照してください。