为了账号安全,请及时绑定邮箱和手机立即绑定

CGO; C函数具有int指针参数,如何传递正确的类型?

CGO; C函数具有int指针参数,如何传递正确的类型?

Go
胡子哥哥 2021-05-20 18:21:36
目前,我正在使用Cgo从Go调用C函数。我正在尝试在Go中重新创建“读取照片”示例。但是,C函数上的一个函数需要一个自int*  len变量(奖励问题;是否与int *len?相同)。在我阅读本文时,这是一个指向整数的指针。有问题的函数是ccv_writelibccv库的。完整的签名是:int ccv_write(ccv_dense_matrix_t* mat, char* out, int* len, int type, void* conf)相关代码段如下:type Image struct {    image *C.ccv_dense_matrix_t}func main() {    image := new(Image)    /* ... snip ... */    dst := C.CString("black_and_white_painting.jpg")    defer C.free(unsafe.Pointer(dst))    x := 0 // <- perhaps var x int ?    C.ccv_write(image.image, dst, (*C.int)(&x), C.CCV_IO_PNG_FILE, 0)}上面的示例生成以下编译时错误: cannot convert &x (type *int) to type *_Ctype_int关于如何传递正确的论点有什么想法?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

这似乎为我工作:


package main


/*


void foo(int *len) { *len = 1234; }


*/

import "C"


func main() {

        var x C.int

        C.foo(&x)

        println(x)

}


查看完整回答
反对 回复 2021-05-24
?
绝地无双

TA贡献1946条经验 获得超4个赞

您将需要unsafe.Pointer演员表。

C.ccv_write(image.image, dst, (*C.int)(unsafe.Pointer(&x)), C.CCV_IO_PNG_FILE, 0)


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 411 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信