首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将C结构从主golang代码传递到不同golang包中的函数

将C结构从主golang代码传递到不同golang包中的函数
EN

Stack Overflow用户
提问于 2019-12-24 13:21:30
回答 1查看 121关注 0票数 1

我试图将C结构从主要的golang代码传递到不同的包中,并得到类型转换错误。

代码片段

C头文件test.h

代码语言:javascript
运行
复制
#include<stdio.h>
struct err_struct {
        int   errnum;
};

Golang包测试

代码语言:javascript
运行
复制
package test
//#include<test.h>
import "C"
func ConvertCtoGoError(err_struct *C.struct_err_struct) {
   //some code
}

golang主代码

代码语言:javascript
运行
复制
package main
import (
        "./lib"
        "fmt"
       )   
/*
#include"lib/test.h"

struct err_struct initialize_structure() 
{
    struct err_struct err;
    err.errnum = 102;
    return err;

}
 */
import "C" 
func main() {
    go_struct:= C.initialize_structure()
    new_struct:= test.ConvertCtoGoError(&go_struct)

}  

在编译主代码时,我得到以下错误:无法将&go_struct (类型*_Ctype_struct_err_struct)转换为类型*test._Ctype_struct_err_struct

当我尝试对变量进行类型转换时,它给出了以下错误:无法引用未导出的名称test._Ctype_struct_dd_err_struct无法将&go_struct (类型*_Ctype_struct_err_struct)转换为类型*test._Ctype_struct_err_struct

请帮我解决这个问题

EN

回答 1

Stack Overflow用户

发布于 2019-12-24 15:50:08

根据go docs https://golang.org/cmd/cgo/的说法

"Cgo将C类型转换为等效的未导出的Go类型。因为翻译是未导出的,所以Go包不应该在其导出的接口中暴露C类型:一个Go包中使用的C类型与另一个Go包中使用的C类型不同。“

与此相关的github问题可以在这里找到:https://github.com/golang/go/issues/13467

到目前为止,建议不要在导出的中公开C类型

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59464147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档