在 go 中调用 c 函数时, 函数参数因为使用 typedef 定义 void *的类型别名定义函数参数时, 传参不匹配问题
package main
/*
#include <stdio.h>
//c中的别名定义
typedef void * handle;
//c函数,参数为一个二级指针
void func1(handle *p)
{
int **temp = (int **)p;
printf("vaule is : %d\r\n", **temp);
**temp = 600;
if(p != NULL)
{
int **num = (int **)p;
printf("test ok! , %d\r\n", **num);
}
}
*/
import "C"
import (
"fmt"
"unsafe"
)
func main(){
var model int = 500
var cModels uintptr
cModels = uintptr(unsafe.Pointer(&model))
p := (*unsafe.Pointer)(unsafe.Pointer(&cModels))
C.func1(p) //因为在c函数中使用了别名定义参数类型,
//这里传参会产生类型不匹配的错误.错误如下.
a := *(*int)(unsafe.Pointer(uintptr(*p)))
println("a", a)
}
当func1(void **p){}
这样定义时,上面的C.func1(p)
调用是没错的,当func1(handle *p){}
改成这样定义时,便会产生如下的错误:
ERROR : cannot use _cgo0 (type *unsafe.Pointer) as type *_Ctype_hand in argument to _Cfunc_func1
这个错误发生的原因是什么呢?请大家了解的可以指导下.谢谢了!
改下排版,学下这个 6.8. Markdown 语法上手(先学这 8 种)