aardio 文档

aardio 范例: 调用 Go 语言 - 回调函数

//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 回调函数指针,
文档:  https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/callback.html

注意: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);
Markdown 格式