Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.1 ) |
- 名前:Will 日時:2011/11/13 20:24
DXライブラリラッパーのDLL化はしたことないですが(lib化はしたことありますけど)、
そのような場合、DXライブラリの関数は全て単一のDLL内で実行しないと正常動作できないと思います。
なぜかというと、DLLにリンクされるDXライブラリと、exeにリンクされるDXライブラリは
その実体が別のものになるからです。
そのため、exeでDxLib_Initをしてもそれはexe側のDXライブラリの話であり、DLL側のDXライブラリには
関係ないため、DLL側ではDxLib_Init未実行状態でDXライブラリの関数を呼び出しているので正しく動作
しないのです。
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.2 ) |
- 名前:ルーキー 日時:2011/11/14 19:12
Willさん
本件、ご回答ありがとうございます。
>DLLにリンクされるDXライブラリと、exeにリンクされるDXライブラリは
>その実体が別のものになるからです。
両者共にDXLib_init()をかけてみましたが、おっしゃる通り呼び出し後に別のオブジェクトが存在しておりますね。
exeとdllとで同一のDXLibオブジェクトを共有できない以上、dll化は困難ですね。残念です。。
ちなみに本件dll化を考えた理由は定石通り保守/管理が目的です。
exe単体ですとexeファイルそのものが7[MB]となり、もしバグ等発生した場合にexeそのものをアップデートすると結構な負担となります。
設定iniやスクリプト、各種参照ファイルは当然分けておりますが、ソースが万単位の行となるとまぁ容量も肥大化しますよね。
リビルドも時間かかりますし。
(7[MB]程度ならまだかわいいものと思われるかもしれませんが。。)
とそんな経緯でした。何かかけるアドバイス等あればお願いいたします。
//ルーキー
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.3 ) |
- 名前:いっち 日時:2011/11/16 20:33
> exe単体ですとexeファイルそのものが7[MB]となり、もしバグ等発生した場合にexeそのものをアップデートすると結構な負担となります。
差分更新ツールの使用は検討されましたか?
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.4 ) |
- 名前:ルーキー 日時:2011/11/17 21:33
いっちさん
ご意見ありがとうございます。ご返信遅くなりました。
>差分更新ツール
バージョン管理ツールの事でしょうか??
本件、利用シーンとしてはお客様にソフトを展開した後にバグが発生したとして、修正版を再展開…
というような事を考えてます。
ですので、修正版のexeを丸ごとパッチ化するのではなく、バグのあるdll,スクリプトのみパッチ化するというような事を考えてました。
(ご質問内容に対して正しく回答できていなければ申し訳ありません)
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.5 ) |
- 名前:いっち 日時:2011/11/17 23:52
私の知っている範囲ですと WDiff ですが古いツールなので今はもっと良いものがあるかもしれません。
どのようなものかはつかってみれば分かると思います。
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.6 ) |
- 名前:Will 日時:2011/11/18 12:01
実際に出来るかどうかはわかりませんけど、私であれば以下のように設計してみます。
・DXライブラリは頻繁に変更されるものではexeにリンクする
・DXライブラリのラッパクラスを作る
・ラッパクラスの実態はexe側に置く
・DLLにはこのクラスを参照で渡して間接的にDXライブラリを使用できるようにする
#ソースで示してくれとかは勘弁して下さい
|
Re: オリジナルdll内でDXLib関数がうまく実行されない ( No.7 ) |
- 名前:ルーキー 日時:2011/11/18 20:22
Willさん
>・DXライブラリは頻繁に変更されるものではexeにリンクする
>・DXライブラリのラッパクラスを作る
>・ラッパクラスの実態はexe側に置く
>・DLLにはこのクラスを参照で渡して間接的にDXライブラリを使用できるようにする
あれから考えて、私自身も概ね上記構成で組んでました。
ただ、考え方として、exeがdll側をよび、そのdllがexeを呼ぶ とあまり見ない構成ですし、
dllの本来の独立性としての意味合いが薄れますよね。(exe内のラッパ関数が固定という前提ですし…)
結果的に当初目的としていた要件を満たすので、
この方向で参ろうと思いますが、他プロダクトを開発するとき、
ラッパのインターフェースが固定である保証がないのが、もやもやしてます。
無論それは自分の設計次第なのですが^^;
お世話になりました。
|