ありがとうございます。
ただ、私が使う関数は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