Re: 多重起動時のデータ読み込み ( No.1 ) |
- 名前:いっち 日時:2012/03/28 19:25
仰りたいことを正確に把握できていません。
ライブラリやアプリとは何を指しているのでしょうか?
また、LoadGraph や MV1LoadModel が失敗している理由をどのように考えになっているのでしょうか?
|
Re: 多重起動時のデータ読み込み ( No.2 ) |
- 名前:よこたん(sogoh) 日時:2012/03/28 22:56
アプリは、ウィンドウを使用するSG箱庭鉄道本体のことで、ス
クリーンセーバーとは別のexeファイルです。
スクリーンセーバーとして動作させるファイルは、このファイ
ルの拡張子をsrcにリネームしたものをsystem32フォルダーに放り
込んでいます。
ライブラリはDxLibのことで、DxWin.cppの中のInitializeWindow()
にある、下記のステップが、Dxライブラリ使用中にスクリーンセ
ーバーが起動しないようにしているものと理解しています。
// スクリーンセーバー無効
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, FALSE, NULL, SPIF_SENDWININICHANGE ) ;
この処理によって、exeファイルのSG箱庭鉄道を実行中には、ス
クリーンセーバーは動作しないことになると思いますが、スクリー
ンセーバーの設定ダイアログの子ウィンドウ表示やプレビューは禁
止されていないので、これらの動作としてのscrファイルのSG箱庭
鉄道は起動され、exeファイルのSG箱庭鉄道と並行して動作するこ
とになります。
このとき、子ウィンドウ表示やプレビュー動作で、グラフィック
データが一切表示されなかったため、LoadGraph()や、MV1LoadModel()
に失敗していると推測しました。exeファイルのSG箱庭鉄道を実行し
ていなければ、スクリーンセーバー設定ダイアログの子ウィンドウ表
示やプレビュー動作でも、グラフィックデータは表示されます。
スクリーンセーバーとして登録しているscrファイルのデバッグ方
法がよくわからなかったので、SetDoubleStartValidFlag(TRUE)を追
加して、exeファイルを2重起動させてみたところ、 LoadGraph()や、
MV1LoadModel()の実行で-1が返ってくることを確認しました。
単体のファイルから読み出す場合は、個々のLoadGraph()や、
MV1LoadModel()のコールごとにfloseが実行されるので、2重起動し
た他のアプリがタイミングをずらしてLoadGraph()や、MV1LoadModel()
をコールしても失敗することはないと考えています。
しかし、アーカイブファイルの中のデータを読み出す場合は、
LoadGraph()や、MV1LoadModel()を抜けても、アーカイブファイルは
オープンされたままになっているので、2重起動した他のアプリから
同一データに対するLoadGraph()や、MV1LoadModel()が失敗する原因
になっている、というのが私の推測です。
であるのであれば、アプリ起動時にすべてのデータを読み込んだ直
後に、アーカイブファイルをクローズしてしまえば、2重起動した他
のアプリが、LoadGraph()や、MV1LoadModel()をコールしても成功す
るのではないかと。
もし、この考えが正しいのであれば、オープンしたままのアーカイ
ブファイルを強制的にクローズする方法があれば解決するように思い
ますがいかがでしょうか。
|
Re: 多重起動時のデータ読み込み ( No.3 ) |
- 名前:いっち 日時:2012/03/29 20:17
SG箱庭鉄道本体とスクリーンセーバーで共通のアーカイブファイルを読み込んでいて、
どちらかが起動中にもう一方を起動すると LoadGraph や、MV1LoadModel に失敗するということでしょうか?
ためしに私の環境でアーカイブファイルからデータを読み込むプログラムを作成し、
二重起動してみましたが問題なく動作しているようでした。
よこたん(sogoh)さんがご使用中のDXライブラリのバージョンはおいくつでしょうか?
過去に以下のような事象が報告されています。
> ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=2262
|
Re: 多重起動時のデータ読み込み ( No.4 ) |
- 名前:よこたん(sogoh)/解決済 日時:2012/03/30 14:47
バージョンは3.04dです。教えていただいた事象の記事より
も前ですね。
質問の際にバージョンを明記してなかったので、お手間をと
らせてしまいました。申し訳ないです。
3.07dに差し替えて試してみたところ、アーカイブからのデ
ータ読み込み関しては問題は発生しませんでした(リンク時に
ソケット関連の外部参照でエラーが出たのでws2_32.libをリン
クするようにして回避)。
ただ、画面表示の座標がおかしくなってしまうという致命的
な問題が発生しまして、ライブラリを差し替えただけでは済ま
ない状況になっています。
新しい問題は、アーカイブの読み込みとは無関係の話で、ま
た、ライブラリの使い方の問題だと思いますので、別スレッド
で質問させていただきます。
ひとまず、ありがとうございました。
|