[openrtm-users 01423] IDLのmodule定義を使うとimplコードがコンパイル不可

2 posts / 0 new
Last post
root
Offline
Last seen: 2 days 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01423] IDLのmodule定義を使うとimplコードがコンパイル不可

株式会社リバストの菅です.
お世話になっております.

OpenRTM-aist 1.0RELEASE C++版
(OpenRTM-aist-1.0.0-RELEASE_vc9_100212.msiでインストール)
を使っています.
OSはWindows (XP, Vista, 7)です.

サービスポートを使用するときに,
IDLを記述しますが,ネームスペースを使いたいので
module定義を使っています.

しかしながら,rtc-templateが生成する
**_impl.cppなどの実装コードに問題があるため,
そのままではコンパイルが通りません.
(既出ならすみません)

詳細:
以下のようにIDLを記述します.

module Amod {
struct hoge {
long a1;
long a2;
};

interface hogehoge {
long operation(out hoge arg);
};
};

すると,生成されるimplクラスのコードが,たとえばヘッダーでは

hogehogeSVC_impl.h

class hogehogeSVC_impl
・・・中略
CORBA::Long operation(hoge& arg);

};

のようになります.
この場合,hogeという構造体は,
Amodというモジュール内で宣言されているので,
AmodというC++の名前空間内に定義されるのですが,
hogehogeSVC_implクラスは,Amod名前空間外に宣言されているので,
本来であれば,operationというメソッドは,

誤 CORBA::Long operation(hoge& arg);
正 CORBA::Long operation(Amod::hoge& arg);

とされるべきではないでしょうか?
ヘッダーにもCPPにも同様の変更を加えねばならず不便です.
おそらくはrtc-templateの変更が必要になると思います.

IDLと,生成されたimplクラスのヘッダーとCPPコードを添付します.
ご確認ください.

それでは

P.S.
現在インストールされているOpenRTMの正確なバージョン
(ビルド番号など)を確認する方法はありますか?
エラーを報告するのにすこし不便です.
できればインストールされるフォルダに,
READMEやVersion.txtなどを入れていただけるとありがたいです.

Undefined
root
Offline
Last seen: 2 days 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 01424] IDLのmodule定義を使うとimplコードがコンパイル不可

株式会社リバスト 菅様
 
産総研 栗原です。
いつもお世話になっております。
IDL定義にてmoduleを使用してインターフェースを定義した場合に、生成される
コードにmoduleが含まれない件につきましては、既に修正済みですので、
お手数ですが、以下からツールのプラグインをダウンロードし、eclipse/plugins
にあるjp.go.aist.から始まるファイルをダウンロードしたものと置き換えてご使用
頂けますでしょうか。
 
http://www.openrtm.org/pub/OpenRTM-aist/dailybuild/tools/1.0.0/
 
 

現在インストールされているOpenRTMの正確なバージョン(ビルド番号など)を確認する方法はありますか?

現状では、1.0.0から0.4.Xかを確認する事はできますが、ビルド番号までは確認
する事ができません。
 

エラーを報告するのにすこし不便です.できればインストールされるフォルダに,READMEやVersion.txtなどを入れていただけるとありがたいです.

おっしゃる通りです。
いつ作成されたバージョンのものなのかがわかった方がサポートもしやすいです
ので、検討させて頂きます。
 
 
以上、宜しくお願い致します。
 
 
 
2010年9月30日10:36 ysuga <>:

株式会社リバストの菅です.お世話になっております.OpenRTM-aist 1.0RELEASE C++版(OpenRTM-aist-1.0.0-RELEASE_vc9_100212.msiでインストール)
を使っています.OSはWindows (XP, Vista, 7)です.サービスポートを使用するときに,IDLを記述しますが,ネームスペースを使いたいのでmodule定義を使っています.しかしながら,rtc-templateが生成する**_impl.cppなどの実装コードに問題があるため,そのままではコンパイルが通りません.(既出ならすみません)
詳細:以下のようにIDLを記述します.module Amod {       struct hoge {               long a1;               long a2;       };       interface hogehoge {               long operation(out hoge arg);
       };};すると,生成されるimplクラスのコードが,たとえばヘッダーではhogehogeSVC_impl.hclass hogehogeSVC_impl・・・中略       CORBA::Long operation(hoge& arg);};のようになります.この場合,hogeという構造体は,Amodというモジュール内で宣言されているので,
AmodというC++の名前空間内に定義されるのですが,hogehogeSVC_implクラスは,Amod名前空間外に宣言されているので,本来であれば,operationというメソッドは,誤       CORBA::Long operation(hoge& arg);正       CORBA::Long operation(Amod::hoge& arg);とされるべきではないでしょうか?
ヘッダーにもCPPにも同様の変更を加えねばならず不便です.おそらくはrtc-templateの変更が必要になると思います.IDLと,生成されたimplクラスのヘッダーとCPPコードを添付します.ご確認ください.それではP.S.現在インストールされているOpenRTMの正確なバージョン(ビルド番号など)を確認する方法はありますか?エラーを報告するのにすこし不便です.
できればインストールされるフォルダに,READMEやVersion.txtなどを入れていただけるとありがたいです.--

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK