[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 メーリングリストの案内