libptr

外部呼出しコマンドの情報アドレスを得る

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変数データのポインタを返す

サンプル逆引き (1)

libptr.hsp

情報

バージョン3.6
作成日2019/12/19
著作者onitama
URLhttp://hsp.tv/
備考ver3.6標準関数
タイプ内蔵関数
グループ基本入出力関数
対応環境
  • Windows 版 HSP
  • コマンドライン版 HSP
hs ファイルhsphelp\i_stdfunc.hs