HSP3でレジストリを書き込もうとしたときに引っかかりそうな場所

以下のような記述で「外部DLLエラー」が出るという質問をHSP掲示板で見かけました。
同じような質問が同時に出ていたので、よく躓きそうな問題だなと思い取り上げます。


#include "hspext.as"
regkey 1,"Software\\hogefuga\\hogefuga",0
getreg regchk,"option",0 ;ここで外部DLLエラー
if stat!0:setreg alarm,"option",1


#include "hspext.as"
regkey 1,"Software\\hogefuga\\hogefuga",1
setreg alarm,"option",1 ;ここで外部DLLエラー


regkeyのstatとるとよくわかると思いますが、
p3=0;レジストリ読み出しモード
p3=1;レジストリ新規作成モード

p3=0;レジストリ読み出しモードだとレジストリが無いと読み出しに失敗します。
p3=1;レジストリ新規作成モードだと、作成したのに新規作成モードでアクセスすると失敗します。(テストで作成したのにさらに新規作成しようとすると失敗)

失敗しているにもかかわらず、「getreg」や「setreg」を続けて行うと

インクルードしている「hspext.as」が呼び出している「hspexp.dll」に「外部DLLエラー」で怒られるようです。
続きを読む


posted by シモン at 10:48 | Comment(0) | TrackBack(0) | HSP3

HSP3でファイルパスを取得する時の問題

HSP掲示板で質問に答えていたときに気が付いた問題。

Windows2000SP4とWindowsXPProSP3でファイルパスを取得するときに違いがあり問題が発生することに気が付いた。


Windows2000SP4では以下のコードで、
 ソフト起動 > ダイアログからファイル読み込み
 D&D
 関連付けからダブルクリック
どれも、問題なくファイルパスが取得できる

[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
if peek(file, ) = '"' : getstr file, file, 1, '"'



ところが、WindowsXPProSP3では、
 ソフト起動 > ダイアログからファイル読み込み
 D&D
は問題なくファイルパスが取得できるが
 関連付けからダブルクリック
は取得できない。

ANTARESさんからヒントを頂いたので検証したところ、以下のようだった。


ソフト起動 > ダイアログからファイル読み込み
 :fileに只のファイルパスが入る
D&D
 :fileにダブルクォーテーションで括られたファイルパスが入る
ダブルクリック
 :fileに最初に半角スペース、ダブルクォーテーションで括られたファイルパスが入る

つまり、条件わけに
何もしなくて良いもの
ダブルクォーテーション分1ビットずらしたもの
スペースとダブルクォーテーション分2ビットずらしたもの
3種類必要。


HSP3.1用以降3.2にも適用
[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
if peek(file,0)='"' : getstr file, file, 1, '"'
if peek(file,1)='"' : getstr file, file, 2, '"'

リピートの記述から変更しました。
理由は追記を読んでください。



HSP3.2用
HSP3.2ではstrtrimという空白を削除する命令が使えるのでそれを使用
[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
file=strtrim(file,3) ;file=strtrim(file,1)でも可
if peek(file,)='"' : getstr file, file, 1, '"'


上のコードでWindows2000もWindowsXPも問題なく開くことが出来るようになった。

http://hsptv.sakura.ne.jp/play/pforum.php?mode=all&num=27841
続きを読む
posted by シモン at 01:18 | Comment(0) | TrackBack(0) | HSP3
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。