ありがとうございます。
ただ、私が使う関数はprintfのように任意の形の引数を任意の数とるような関数なので、
#func f "f" var p1
#func f2 "f" var p1, p2
#func f3 "f" var p1, p2, p3
...
と延々と書かなければなりません。
そのため、GetProcAddressとcallfuncで動的に呼び出すことにしました。
需要ないと思いますが、一応貼っておきます。
#module
#uselib "kernel32.dll"
#func LoadLibrary "LoadLibraryA" sptr
#func FreeLibrary "FreeLibraryA" int
#func GetProcAddress "GetProcAddress" int,sptr
#deffunc vauselib str _filename
vafreelib
LoadLibrary _filename
hModuleDll = stat
return
#deffunc vafreelib onexit
if hModuleDll != 0 {
FreeLibrary hModuleDll
if stat == 0 {
return -1
}
}
return 0
#deffunc vafunc var pProc, str _procName
procName = _procName
GetProcAddress hModuleDll, varptr(procName)
if stat == 0 {
return -1
}
pProc = stat
return 0
#deffunc vacall int _pProc, array params
return callfunc(params, _pProc, length(params))
#global
#if 0
vauselib "hogeDll.dll"
vafunc f, "f" //__declspec(dllexport) const char *(f) (int a, const char *b, ...);
s = "numbers are %d, %d, %d, %d"
/* a */ /* *b */ /* ... */
prms = hoge, varptr(s), 3, 5, 2, 9
vacall f, prms
mes stat
#endif