[openrtm-users 00979] Win32 DLL でのRTC利用 RTC Builderの生成コードについて

1 つの投稿 / 0 new
root
オフライン
Last seen: 11時間 29分 前
登録日: 2009-06-23 14:31
[openrtm-users 00979] Win32 DLL でのRTC利用 RTC Builderの生成コードについて

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に変更していただけませんか?
この方が保守ははるかに便利です.

次回のアップでこのあたりの対応をお願いできませんか?
よろしくお願いします.

未定義

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク