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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1019
catsSHBrowseForFolderの仕様2解決


cats

リンク

2014/10/19(Sun) 09:57:59|NO.65614

あるモジュールのフォルダ選択ダイアログを表示する機能を使おうとすると
Error 1 (システムエラー)が発生しました。
SHBrowseForFolderという命令でエラーになっているようです。
そこでインターネット上のいくつかのコードを比較したところ
http://hspnext.com/hspkura/hspkura06.htm#contents07
上記のサイトのコードでも同様のエラーが発生しました。
しかし下記のサイトのコードではエラーは発生しませんでした。
http://blog.goo.ne.jp/hiro239415/e/8a103d449861df375756968dcfb172d0
2つのコードを見てみるとSHBrowseForFolderにポインタを渡す配列変数が

前者(エラー発生)では

(0) : ウィンドウハンドル (1) : 0 (2) : 0 (3) : 表示するメッセージが入った変数のポインタ (4) : オプションの数値 (5) : $08247C83, $90177501, $102474FF, $6668016A, $FF000004, $B8102474, SendMessage関数のポインタ?, $C031D0FF, $000010C2 (6) : 初期ディレクトリが入った変数のポインタ (7-) : 0
でした。
後者(正常)では

(0) : ウィンドウハンドル (1) : 0 (2) : フォルダ名(?)へのポインタ (3) : 表示するメッセージが入った変数のポインタ (4) : オプションの数値 (5) : 0 (6) : 0 (7-) : 0
でした。
そこで前者のコードの

browsinfo(5)=varptr(brproc) : browsinfo(6)=varptr(deffolder)
を消したところ、正常に動作しました。
最初のモジュールでも同じエラーが起きたので、前者のサイトがエラーのあるまま記載したとは考え難いです。
SHBrowseForFolderの仕様が変更された、ということはあるのでしょうか。

私の OS は Windows 7 64bitです。皆さんは同様のエラーが発生しますか。



この記事に返信する


Flat

リンク

2014/10/19(Sun) 10:24:10|NO.65615

OSは同じですが、エラーは発生しませんでした。
見た感じDEP関連だと思ったのですが、下のコードを件のコード上部に追加し
dim brproc, 9をxdim brproc, 9にした場合はどうなるでしょうか。


#uselib "Kernel32.dll" #func global VirtualProtect_xdim "VirtualProtect" var,int,int,var #define global xdim(%1,%2) dim TEMP_VAR@xdimm:dim %1,%2:VirtualProtect_xdim %1,(%2)<<2,0x40,TEMP_VAR@xdimm



cats

リンク

2014/10/19(Sun) 10:40:07|NO.65616

>Flat さん
その通りに修正してみたところ直りました!
DEP関連というと何が起こっているのでしょうか。
DEPの設定はバッファーオーバーフローの実験のときのアプリケーションが
許可されたままでしたがそれが関係あるのでしょうか。
とりあえず解決にしておきます。



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