#include "loadlib.as" ;================================================================================= ; ; 機械語使ってqsortを使ってみる2 ; ; test_libload5.asで保存した機械語(バイナリ)ファイルを使う ; ;================================================================================= ;void qsort (const void* pBase, size_t cntObjects, size_t sizeObject, ; int(*pCompar)(const void *, const void *)); #define SIZE_OF_INT 4 ll_libload h_MSVCRT,"msvcrt.dll" if stat!0 : dialog "msvcrt.dllがロードできません" : end ll_getproc F_qsort,"qsort",h_MSVCRT if stat!0 : dialog "関数qsortが見つかりません" : goto _libfree alloc buf,1024 ;ファイル読み込み用のバッファ ;機械語1のロード filename = "_numsort.mcn" : gosub load_file if size=-1 : goto _m2 ll_getptr buf : ll_ret p_proc itm_n=24 : dim itm.i,itm_n randomize repeat itm_n : rnd itm.cnt,$ffff : loop mes "ソート前" repeat itm_n : mes "itm."+cnt+"="+itm.cnt :loop ll_getptr itm : ll_ret p_itm param.0=p_itm param.1=itm_n param.2=SIZE_OF_INT param.3=p_proc ll_callfunc param,4,F_qsort pos 120,0 mes "ソート後" i=0 : repeat itm_n : mes "itm."+i+"="+itm.i : i+ :loop mes " " *_m2 ;機械語2のロード filename = "_strsort.mcn" : gosub load_file if size=-1 : goto _libfree ll_getptr buf : ll_ret p_proc2 strs_n=25 sdim strs,32,strs_n dim p_strs,strs_n i=0:strs.i="1234567" i++:strs.i="らりるれろ" i++:strs.i="ABCDEFG" i++:strs.i="漢字" i++:strs.i="#9415" i++:strs.i="234567" i++:strs.i="左" i++:strs.i="たちつてと" i++:strs.i="ABCD" i++:strs.i="あいうえお" i++:strs.i="12345" i++:strs.i="__abcde" i++:strs.i="abcdef" i++:strs.i="かきくけこ" i++:strs.i="bcdef" i++:strs.i="さしすせそ" i++:strs.i="#9415" strs_n=i+1 repeat strs_n : ll_getptr strs.cnt : ll_ret p : p_strs.cnt=p : loop ll_getptr p_strs : ll_ret pp_strs x=250:h=0 pos x,h : s="" mes "ソート前" repeat strs_n : ll_peek s,p_strs.cnt : mes s : loop param.0=pp_strs param.1=strs_n param.2=SIZE_OF_INT param.3=p_proc2 ll_callfunc param,4,F_qsort pos x+100,h mes "ソート後" repeat strs_n : ll_peek s,p_strs.cnt : mes s : loop dialog "終了" *_libfree ll_libfree h_MSVCRT end *load_file exist filename size=strsize if size=-1 : dialog filename+"が見つかりません" : return bload filename,buf,size return