外部呼出しコマンドの情報アドレスを得る
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.0 |
| 作成日 | 2004/10/12 |
| 著作者 | onitama |
| URL | http://www.onionsoft.net/ |
| 備考 | ver3.0標準関数 |
| タイプ | 内蔵関数 |
| グループ | 基本入出力関数 |
| hs ファイル | hsphelp\i_stdfunc.hs |