libptr64

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

val = libptr64(p1)

p1 : アドレスを調べるコマンド

(プラグイン / モジュール : hspint64.dll)

解説

libptr関数の64bit対応版です。
なお、hspint64.as をインクルードした場合は、既存のlibptr関数は、libptr64関数に置き換えられています。

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ハンドルなどの情報を得ることが可能です。

サンプル

#include"hsp3_64.as"
#include "hspint64.as"

#uselib "user32.dll"
#func MessageBoxA "MessageBoxA" int,sptr,sptr,int

ladr=libptr64( MessageBoxA )
dupptr lptr,ladr,32	; STRUCTDAT構造体を取得
lib_id=wpeek(lptr,0)
mes "LIB#"+lib_id
mref hspctx,68
linf_adr=qpeek( hspctx, 1352 )
dupptr linf,linf_adr + lib_id*20,20	; LIBDAT構造体を取得
dll_flag = linf(0)
dll_name = linf(1)
dll_handle = qpeek(linf, 8)
mes "FLAG("+dll_flag+") NAME_ID#"+dll_name
mes "HANDLE="+strf("%I64x",dll_handle)
stop

関連項目

varptr64変数データのポインタ(64bit)を返す(hspint64.dll)
dupptr64ポインタ(64bit)からクローン変数を作成(hspint64.dll)

サンプル逆引き (1)

06_libptr64.hsp

情報

プラグイン / モジュールhspint64.dll
バージョン1.03
作成日2021/06/13
著作者inovia
URLhttps://hsp.moe/
備考#include "hsp3_64.as"
#include "hspint64.as"
以上2つのファイルをインクルードすること。
(ソースコード上の記述個所は一番上を推奨)
タイプint64型拡張プラグイン
グループint64
対応環境
  • Windows 版 HSP
移植のヒント64bit版 Windows のみ
hs ファイルhsphelp\hspint64.hs