Cのソースはスクリの一番上に書いてあります。
これを実行すると、callfunc の部分でシステムエラーになります。
/*----------------------------- #include <windows.h> double WINAPI func(double *p1) { double a = *p1; return a+2.5; } -----------------------------*/ #uselib "kernel32" #func global VirtualProtect "VirtualProtect" var, int, int, var #define global xdim(%1,%2) dim %1, %2 : VirtualProtect %1, %2*4, $40, rrr #module #deffunc getdouble if code == 0 { xdim code, 3 code = $0424448b,$04c218dd,$00000000 fret=0.0 } prm = varptr(fret) res = callfunc(prm, varptr(code), 1) return fret #global xdim mcncode, 4 mcncode = $0424448b, $05dc00dd, $00000000, $000004c2 a = 3.0 prm = varptr(a) ret = callfunc(prm, varptr(mcncode), 1) getdouble dialog refdval end
これだとエラーになりません。
/*----------------------------- #include <windows.h> double WINAPI func(double *p1, double *p2) { double a = *p1; double b = *p2; return a+b; } -----------------------------*/ #uselib "kernel32" #func global VirtualProtect "VirtualProtect" var, int, int, var #define global xdim(%1,%2) dim %1, %2 : VirtualProtect %1, %2*4, $40, rrr #module #deffunc getdouble if code == 0 { xdim code, 3 code = $0424448b,$04c218dd,$00000000 fret=0.0 } prm = varptr(fret) res = callfunc(prm, varptr(code), 1) return fret #global xdim mcncode, 4 mcncode = $0424448b, $448b00dd, $00dc0824, $000008c2 a = 3.0 b = 2.5 prm = varptr(a), varptr(b) ret = callfunc(prm, varptr(mcncode), 2) getdouble dialog refdval end
どうしてでしょうか?
要は 数値 2.5 をマシン語の中に埋め込むか、HSPから渡すのかの違いですが・・・
上のスクリのような書き方をしたいのですが、どうにかならないでしょうか?
よろしくお願いします。