[openrtm-users 01423] IDLのmodule定義を使うとimplコードがコンパイル不可
ysuga
ysuga @ pop07.odn.ne.jp
2010年 9月 30日 (木) 10:36:08 JST
株式会社リバストの菅です.
お世話になっております.
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などを入れていただけるとありがたいです.
--
//////////////////////////////////////////////
菅 佑樹 (すが ゆうき)
E-mail: ysuga @ ysuga.net
研究者関連: http://www.ysuga.net/research
ロボット関連: http://www.ysuga.net/robot
インラインスケート: http://www.ysuga.net/inline
おしらせ: RTミドルウエアやってます
http://www.ysuga.net/robot/rtm
/////////////////////////////////////////////
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: ysuga_test.idl
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20100930/868672db/attachment-0002.ksh>
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: ysuga_testSVC_impl.cpp
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20100930/868672db/attachment-0003.ksh>
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: ysuga_testSVC_impl.h
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20100930/868672db/attachment-0001.h>
openrtm-users メーリングリストの案内