HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1204
七次元プラグイン、ヘッダファイルの置き場所4未解決


七次元

リンク

2006/12/4(Mon) 16:11:15|NO.3956

どうも七次元です。
自分はどれが追加したプラグインかわかるようにカレントディレクトリにdllファイルを入れていました。
(ヘッダファイルは chdir/plugin/ 内に)
今まで一度も問題がなかったのですが今日新しいプラグインを追加してスクリプトを打ってましたらシステムエラーで使えない機能がありました。
それも微妙なことに(同じプラグインの)他の命令は使えるのに1つだけシステムエラー・・・
しかも正常な値を入れるとエラー。不正な値を入れるとstatにエラー番号が帰ってくるもののシステムエラーで終了はしませんでした。
HSP3対応と他サイトに書いてたのですがサンプルはhps2用だったのでHSP3じゃ完全に対応してないのかな?っと思って
色々やっていたところ、HPS3本体が入っているフォルダ(本当はここにプラグインを追加な場所)にhpi(DLL)を入れると正常に作動しました。
(スクリプトミスかと思って数時間格闘してた・・・)

なんとか使用はできましたが自分はシステム(プロセス)に興味がありまして、なぜこんなことが起こったのか非常に興味があります(ぉ
また、プラグインの置き場を設定できる裏設定みたいなのがありましたら教えてください。
hsp2の頃はテキストにメモしていたのですが、プラグインが増えるとHSP本体フォルダがごちゃごちゃして見づらかったです・・・
駄文失礼しました



この記事に返信する


Irisawa

リンク

2006/12/4(Mon) 23:51:54|NO.3962

拡張プラグイン(DLL)の検索パスはWindowsのサーチパスと同じです。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_loadlibrary.asp


1.アプリケーションのロード元ディレクトリ 2.カレントディレクトリ 3.Windows 95/98:Windows のシステムディレクトリ。 Windows NT/2000:Windows の 32 ビット版システムディレクトリ。 4.Windows NT/2000:Windows の 16 ビット版システムディレクトリ。 5.Windows ディレクトリ。 6.環境変数 PATH に記述されている各ディレクトリ

一番先に見つかったものが使用されるので先に同名の別ファイルが見つかった場合は正常に
動作しなかったり問題が起こると思います。

#includeは「指定パス」->「<HSPインストールディレクトリ>/common」の順番に検索する
みたいです。
(指定パスにないとカレントを検索せずに次はcommonを検索するみたいです)

なお、上記は基本的な仕様であり、実際にはそれぞれの実行モジュール毎に微妙に異なると
思います。
特にHSPプラグインはHSPインストールディレクトリをカレントと仮定している場合が多いと
思いますのでカレント以外に置くと想定外の動作をする可能性があります。
また、パスにスペースが入っている場合も正常動作しないことがあるようです。
これはWinの仕様も絡んでいるようなので難しいところなのですがあまり例外的なことは
しない方が問題が起こりにくいと思ってください。

ただ、プラグインモジュール側の不具合も考えられるので一応、配布元には連絡した方が
いいでしょう。



七次元

リンク

2006/12/7(Thu) 09:14:29|NO.4011

詳しく返答してくださりありがとうございます。
サンプルは.asなのでHSP2時代のプラグインだと思います。
HSP2の頃はカレントディレクトリに入れても使えなかったはず・・・
多分一部の命令を微妙にプラグイン内で省略したりしてたのかな?
一部の命令だけ正常な値を入れたときにエラーが出るというのは不思議です

現在は代理配布のプラグインですしHSP2用なので連絡しない方がいいかな・・・



Irisawa

リンク

2006/12/7(Thu) 11:39:26|NO.4012

HSP内部での拡張プラグインのロード動作自体はLoadLibraryで行っているはずなので
そのままLoadLibraryの仕様に従った状態であると思われます。

ただ、カレント=EXEのある場所と仮定しているプラグインなどの場合は正常に動作しない
可能性もあります。
まあ、HSP側の不具合である可能性も0ではありませんが。

一部というのがよく分かりませんね。
あとは、モジュール空間内でglobal指定されていない拡張命令を使用したとか...。
どんなプラグインでエラーが起こっていますか?



七次元

リンク

2006/12/7(Thu) 15:51:35|NO.4027

AMpngというPNGの読み書きができるプラグインです。
症状をまとめると
EXEのあるフォルダに入れると正常に動く。
カレントディレクトリに入れると一部の命令でエラーがでる。
引数に間違った値を入れるとstatにエラーが返るだけだが、正常な値を入れるとHSPがエラーを返して実行を強制終了。
エラーが出た命令はAMpngCreate これだけじゃないかもしれない

AMpngCreate 0,8,0 画面をメモリにPNGデータとして確保
1つ目は操作用ID(任意の整数)、2つ目はビット深度(PNGは8まで)、3つ目はグレイスケールフラグ(カラーは0)
ビット深度を1,2,4にすると「ビットが足りない」という意味のエラー番号がstatに返ってくる。
8にするとHSPからエラーダイアログが出る。

っという感じです。



ONION software Copyright 1997-2018(c) All rights reserved.