求教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个代理函数。

要回复问题请先登录注册