[openrtm-users 00979] Win32 DLL でのRTC利用 RTC Builderの生成コードについて
Yuki Suga
ysuga @ suou.waseda.jp
2009年 10月 22日 (木) 16:31:18 JST
OpenRTM-aist開発者の皆さま:
お世話になっております.早大の菅です.
RTCをWin32 DLLとして利用する際に,RTCBuilderの生成する
プロジェクトファイルの設定について意見があり
メールを差し上げました.
慣れでやっているので古い情報かもしれません.
詳しい方がいらっしゃったらフォローをくださるとありがたいと思っています.
問題は2点です.
■DLLのEXPORT定義が無いためDLLが使えない
■DLLのファイル名がDebugでもReleaseでも同じなので不便
以下に詳しく示します.
■DLLのEXPORT定義が無いためDLLが使えない
DLLとしてRTCを生成する際にDLLをロードした実行ファイルから
○○Init関数(○○はコンポーネント名)を実行するのが
DLL版RTCの基本的な使い方かと思います.
そしてDLLを記述する際に,○○Init関数をExportする設定を
「モジュール定義ファイル(*.def)」で行うか,
Init関数の宣言方法を
__declspec(dllexport)
をつけて宣言する必要があると思います.
つまりヘッダの宣言部を
extern "C"
{
void __declspec(dllexport) PeriodicDataInInit(RTC::Manager* manager);
};
とします.
しかし,現状ではRTC Builderが生成したコードをそのまま
コンパイルしてもDLLは使えないままになっていると思います.
(間違っていたら使用法を教えていただけませんでしょうか)
.defファイルを使う方が簡単です.
プロジェクトにモジュール定義ファイルの部分を追加して,
defファイルを同時に生成してください.
defファイルの内容は
LIBRARY "○○"
EXPORTS ○○InInit
の2行で十分だと思います.
ただ後者の関数宣言をいじる方が暗黙的利用(○○.libをリンクして,
ヘッダファイルで宣言された関数を再利用する)
が使えるらしいので便利です(まだ試していません)
WIN32のマクロを使えば可能かと思います(これもまだ).
■DLLのファイル名がDebugでもReleaseでも同じなので不便
Debug,もしくはReleaseでコンパイルしても,
DLLの出力ファイルが同じ名前になっています.
これは不便です.
DebugでビルドしたDLLはRTC100d.dllに依存し,
ReleaseではRTC100.dllに依存していますが,
再利用する側のexeファイルで異なる側
(つまりDLLはDebugだが,exeはReleaseなど)
が使われていると,エラーを起こして実行できません.
できればRTC Builderで生成したプロジェクトファイルの時点で,
Debug側のDLL出力名を○○d.dllに変更していただけませんか?
この方が保守ははるかに便利です.
次回のアップでこのあたりの対応をお願いできませんか?
よろしくお願いします.
--
/************************************************
* Yuki Suga (Research Associate) *
* Intelligent Machine Laboratory *
* Dept. of Creative Science and Engineering *
* School of Modern Mechanical Engineering *
* Waseda University *
* E-mail: ysuga @ suou.waseda.jp *
* http://www.sugano.mech.waseda.ac.jp/~ysuga *
************************************************/
__________ ESET NOD32 Antivirus からの情報, ウイルス定義データベースのバージョン 4531 (20091022) __________
このメッセージは ESET NOD32 Antivirus によって検査済みです。
http://canon-its.jp
openrtm-users メーリングリストの案内