求教C和go结构体互转

C代码如下: struct callback { void ( CallStatus)(int n); void ( CallId)(int n); };

void Status(int n){ printf("Status: %d\n", n); } void CallId(int n){ printf("id: %d\n", n); }

int main(){ printf("this is c application\n"); struct callback a; a.CallStatus = Status; a.CallId = CallId;

GoStart(这里怎么传参呀 );
return 0;

}

其中GoStart是go里面的函数

type Callback interface { CallStatus(int) CallId(int) } func GoStart(cb Callback) { c := unsafe.Pointer(cb)

}

怎么把cb转成go里面的接口呀,把*C.void 转成 type Callback interface{},因为我要在里面回调给C

已邀请:

chai2010 - 数盲患者

赞同来自:

需要代理函数辅助。大概思路是: 做2个全局的c函数,分别调用callstatus和callid,输入参数是这个cb。 在Go这边是可以拿到cb的,做一个对象实现callback接口,在两个方法中调用在c中的2个代理函数。

要回复问题请先登录注册