小编sis*_*oft的帖子

Cgo:找不到使用const char*参数回调的方法

我使用Cgo从Go使用C库,除了回调之外都是好的.库有回调设置器,它接受指向回调函数的指针.回调函数本身用go编写并使用Cgo语法导出.
问题:我可以用char *参数制作和导出函数,但不能用const char *.

代码说明:
test.go:

package main

/*
typedef void (*cb_func)(const char *, int);
void callback(cb_func);
void myFunc(const char *, int);
*/
import "C"
import (
        "fmt"
        "unsafe"
)

//export myFunc
func myFunc(buf *C.char, ln C.int) {
        fmt.Printf("Got: %s\n", C.GoStringN(buf, ln))
}

func main() {
        C.callback((C.cb_func)(unsafe.Pointer(C.myFunc)))
}
Run Code Online (Sandbox Code Playgroud)

test.c:

typedef void (*cb_func)(const char *, int);

void callback(cb_func cb) {
        cb("test", 4);
}
Run Code Online (Sandbox Code Playgroud)

输出来自go build:

In file included from $WORK/test/_obj/_cgo_export.c:2:0:
./test.go:54:13: error: …
Run Code Online (Sandbox Code Playgroud)

callback go cgo

3
推荐指数
2
解决办法
2293
查看次数

标签 统计

callback ×1

cgo ×1

go ×1