我正在使用 Go 中的 C 库,使用 Cgo 以及除了回调之外的所有好东西。库有回调设置器,它需要指向回调函数的指针。回调函数本身用 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)))
}
测试.c:
typedef void (*cb_func)(const char *, int);
void callback(cb_func cb) {
cb("test", 4);
}
输出go build:
In file included from $WORK/test/_obj/_cgo_export.c:2:0:
./test.go:54:13: error: conflicting types for 'myFunc'
./test.go:7:6: note: previous declaration of 'myFunc' was here
void myFunc(const char *, int);
^
/tmp/go-build994908053/test/_obj/_cgo_export.c:9:6: error: conflicting types for 'myFunc'
void myFunc(char* p0, int p1)
^
In file included from $WORK/test/_obj/_cgo_export.c:2:0:
./test.go:7:6: note: previous declaration of 'myFunc' was here
void myFunc(const char *, int);
^
没有const限定符的代码编译并按预期工作。
*C.char在 C 中可以使用什么来获取 const 字符串?
蝴蝶刀刀
子衿沉夜
相关分类