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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0725
p、USAGIプリプロセッサを使わずにDLLを使用 (selfolder)2解決


p、USAGI

リンク

2009/7/25(Sat) 00:07:16|NO.26551

DLLを発見したら selfolder を実行したいのですが、
callfunc で失敗してるようです。
どこを変えれば良いのでしょうか?


#uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" sptr #cfunc GetProcAddress "GetProcAddress" int, sptr #module #deffunc selfolder var p1,str p2 sdim _p1,1024 _p2 = ""+p2 prm = varptr(_p1), varptr(_p2) res = callfunc(prm, _selectfolder@, 2) p1 = _p1 return res #global //--------------------------------- dll_path = dir_exe+"\\hspext.dll" dirlist dummy,dll_path,0 if stat=1 : { //DLLを発見したら実行 hhspext = LoadLibrary(dll_path) _selectfolder = GetProcAddress(hhspext, "_selfolder@16") selfolder directory,"ディレクトリを選択してね byHSP3.x" mes "stat="+stat mes directory }
参考にしました http://hsp.tv/play/pforum.php?mode=all&num=26356



この記事に返信する


ANTARES

リンク

2009/7/25(Sat) 02:45:11|NO.26552

 hspext.asを見ると以下のように記述してあります。
>#func selfolder selfolder $15
数値を指定した場合はhsp2.5以降と同じ仕様ということなので
調べてみると第4引数にrefstrへのポインタが渡されることに
なっています。

 呼び出す場合はrefstrにこだわる必要はないので、
4096バイトの文字列バッファへのポインタを渡せばいいでしょう。



p、USAGI

リンク

2009/7/25(Sat) 04:01:07|NO.26553

>ANTARESさん
ありがとうございます。
以下のようにしたら成功しました。

#deffunc selfolder var p1,str p2 sdim _p1,1024*4 sdim _p3,1024*4 _p2 = ""+p2 prm = varptr(_p1), varptr(_p2),0,varptr(_p3) res = callfunc(prm, _selectfolder@, 4) mes "_p1="+_p1 mes "_p3="+_p3 p1 = _p1 return res



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