//aardio 调用 Go 语言 - 回调函数 import golang; var go = golang(); go.main = /********** package main /* typedef int _stdcall (*addCallBack)(int a,int b); //用 C 函数回调 aardio 函数 static int callAddCallBack(void* fnAdd,int a,int b){ return ((addCallBack)fnAdd)(a,b); } */ import "C" //C 代码写在这一句前面 import "unsafe" //export TestCallBack func TestCallBack(fnCallback unsafe.Pointer) int{ //用 C 函数回调 aardio 函数,改用 aardio.callPtr() 更简单一些。 var r = C.callAddCallBack(fnCallback,123,2) //C.int 转换为 Go 类型: int return int(r) } func main() {} **********/ go.buildShared("/.go/cgoCallback.go"); //------------------下面调用 DLL----------------------- import console.int; //加载 Go 编译的 DLL var goDll = raw.loadDll("/.go/cgoCallback.dll",,"cdecl"); /* 创建 C 回调函数指针, 文档: doc://library-guide/builtin/raw/callback.md 注意:aardio 与 Go 导出函数所在的默认 goroutine 之间的互调属于同一线程(这里不用考虑多线程),不必使用 thread.tostdcall)。 */ var callback = raw.tostdcall( function(a,b){ return a+b; },"int(int a,int b)"); var ret = goDll.TestCallBack( callback ) console.log(ret);