外部呼出しコマンドの情報アドレスを得る
val = libptr(p1)
p1 : アドレスを調べるコマンド
p1に指定したコマンドの情報アドレスを取得して整数値として返します。 外部DLL呼び出しコマンドや関数をパラメーターとして指定することで、コマンドに関する情報が格納されているSTRUCTDAT構造体のアドレスを取得することができます。 STRUCTDAT構造体は、HSPSDK内で以下のように定義されています。 typedef struct STRUCTDAT { short index; // base LIBDAT index short subid; // struct index int prmindex; // STRUCTPRM index(MINFO) int prmmax; // number of STRUCTPRM int nameidx; // name index (DS) int size; // struct size (stack) int otindex; // OT index(Module) / cleanup flag(Dll) union { void *proc; // proc address int funcflag; // function flags(Module) }; } STRUCTDAT; p1にCOM呼び出しコマンドやユーザー定義命令、 ユーザー定義関数を指定した場合も同様にSTRUCTDAT構造体のアドレスが取得されます。 libptr関数は、HSPが使用している内部データへのアクセスを補助するもので、ここで扱う情報の内容について十分な知識を持った上で使用するようにしてください。 通常の使用範囲では、この関数を利用したり覚えておく必要はありません。 STRUCTDAT構造体を参照することで、 外部呼出しDLLのアドレスや、DLLハンドルなどの情報を得ることが可能です。
#uselib "user32.dll" #func MessageBoxA "MessageBoxA" int,sptr,sptr,int ladr=libptr( MessageBoxA ) dupptr lptr,ladr,28 ; STRUCTDAT構造体を取得 lib_id=wpeek(lptr,0) mes "LIB#"+lib_id mref hspctx,68 linf_adr=lpeek( hspctx, 832 ) dupptr linf,linf_adr + lib_id*16,16 ; LIBDAT構造体を取得 dll_flag = linf(0) dll_name = linf(1) dll_handle = linf(2) mes "FLAG("+dll_flag+") NAME_ID#"+dll_name mes "HANDLE="+strf("%x",dll_handle) stop
varptr | 変数データのポインタを返す |
バージョン | 3.6 |
作成日 | 2019/12/19 |
著作者 | onitama |
URL | http://hsp.tv/ |
備考 | ver3.6標準関数 |
タイプ | 内蔵関数 |
グループ | 基本入出力関数 |
対応環境 |
|
hs ファイル | hsphelp\i_stdfunc.hs |