外部呼出しコマンドの情報アドレス(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) |
| プラグイン / モジュール | hspint64.dll |
| バージョン | 1.03 |
| 作成日 | 2021/06/13 |
| 著作者 | inovia |
| URL | https://hsp.moe/ |
| 備考 | #include "hsp3_64.as"
#include "hspint64.as" 以上2つのファイルをインクルードすること。 (ソースコード上の記述個所は一番上を推奨) |
| タイプ | int64型拡張プラグイン |
| グループ | int64 |
| 対応環境 |
|
| 移植のヒント | 64bit版 Windows のみ |
| hs ファイル | hsphelp\hspint64.hs |