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

目前,我正在使用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


关于如何传递正确的论点有什么想法?


胡子哥哥
浏览 452回答 3
3回答

慕侠2389804

这似乎为我工作:package main/*void foo(int *len) { *len = 1234; }*/import "C"func main() {&nbsp; &nbsp; &nbsp; &nbsp; var x C.int&nbsp; &nbsp; &nbsp; &nbsp; C.foo(&x)&nbsp; &nbsp; &nbsp; &nbsp; println(x)}

绝地无双

您将需要unsafe.Pointer演员表。C.ccv_write(image.image,&nbsp;dst,&nbsp;(*C.int)(unsafe.Pointer(&x)),&nbsp;C.CCV_IO_PNG_FILE,&nbsp;0)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go