#include "loadlib.as" ;================================================================================= ; ; ll_libload, ll_getproc, ll_callfunc, ll_libfreeの使用例 3 ; ;================================================================================= ll_libload h_MSVCRT, "msvcrt.dll" ;msvcrt.dllのハンドル if stat!0 : dialog "msvcrt.dllのロードに失敗しました":end ll_getproc F_atoi,"atoi",h_MSVCRT if stat!0 : dialog "atoiのアドレスを取得できませんでした":goto free_MSVCRT s="12345" : ll_getptr s : ll_ret p_s param.0=p_s ;引数が一つの場合param=p_sとしても同じ param_num=1 ;引数が一つの場合 ll_callfunc p_s, 1, F_atoi としても同じ ll_callfunc param, param_num, F_atoi ll_ret ret_atoi dialog "atoiの返り値は "+ret_atoi #define SIZE_OF_INT 4 ;msvcrt.dllは関数以外に下のような数値のポインタもexportしている sdim get_val,16,4 i=0:get_val.i="_osver" i++:get_val.i="_winmajor" i++:get_val.i="_winminor" i++:get_val.i="_winver" i++ repeat i ll_getproc p_val,get_val.cnt,h_MSVCRT if stat!0 : dialog get_val.cnt+"のアドレスを取得できませんでした":continue ll_peek val,p_val,SIZE_OF_INT dialog get_val.cnt+"="+val loop *free_MSVCRT ll_libfree h_MSVCRT if stat!0 : dialog "msvcrt.dllの開放失敗" dllname="user32.dll" ll_libload h_USER32, dllname ;user32.dllのハンドル if stat!0 : dialog dllname+"のロードに失敗しました":end funcname="MessageBoxA" ll_getproc F_MsgBox, funcname, h_USER32 if stat!0 : dialog funcname+"のアドレスを取得できませんでした":goto free_USER32 ll_getptr capt : ll_ret p_capt ll_getptr msg : ll_ret p_msg param.0=0 param.1=p_msg param.2=p_capt param_num=4 dup type,param.3 repeat 3 if cnt=0 : capt="test" : msg="メッセージ" : type = $31 if cnt=1 : capt="2回目" : msg="メッセージ2" : type=$25 if cnt=2 : capt="3回目" : msg="メッセージ3" : type=$14 ll_callfunc param, param_num, F_MsgBox ll_ret ret_MsgBox dialog funcname+"の返り値は "+ret_MsgBox loop *free_USER32 ll_libfree h_USER32 if stat!0 : dialog dllname+"の開放失敗" end