亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

傳遞給 Go 的 C 引用無法識別 typedef void*?

傳遞給 Go 的 C 引用無法識別 typedef void*?

Go
ITMISS 2022-04-26 10:54:45
chtypedef void*       MVar;C_FUNC(    MVar*     myvar   //[out], return value)測試.govar cvar unsafe.Pointer_ = C.C_FUNC(&cvar)當我運行 test.go 時,它告訴我cannot use _cgo5 (type *unsafe.Pointer) as type *_Ctype_MVar in argument to _Cfunc_C_FUNC在本文檔Command cgo: Go references to C中,它說“C 類型 void* 由 Go 的 unsafe.Pointer 表示?!?
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

cannot use _cgo5 (type *unsafe.Pointer) as type *_Ctype_MVar 

in argument to _Cfunc_C_FUNC

Go 工具鏈說你有一個類型不匹配。


具有匹配類型的等效工作示例,


package main


import (

    "fmt"

    "unsafe"

)


/*

typedef void* pv_t;

void cfunc(pv_t *p);


#include <stdio.h>

int i;

void cfunc(pv_t *p) {

    i = 42;

    *p = &i;

    printf("%p %p %d\n", p, *p, *(int*)(*p));

}

*/

import "C"


func main() {

    var cptr unsafe.Pointer

    C.cfunc((*C.pv_t)(&cptr))


    fmt.Println(&cptr, cptr, *(*C.int)(cptr))

}

輸出:


$ go run so.go

0xc000010028 0x592d18 42

0xc000010028 0x592d18 42

$


查看完整回答
反對 回復 2022-04-26
  • 1 回答
  • 0 關注
  • 391 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號