Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Go (golang)和C++之间的交换数据结构(数组)

Go (golang)和C++之间的交换数据结构(数组)
EN

Stack Overflow用户
提问于 2015-02-17 08:31:43
回答 1查看 1.7K关注 0票数 1

我正在尝试将一个C++库连接到一个用Go编写的应用服务器。目标是C++库和应用服务器都在开发一个通用的数据结构,这意味着:

  1. Go应用服务器可以访问由C++库创建的数组。
  2. C++库可以处理由Go appserver创建的数组。

我在玩cgo和连接C++,到目前为止一切都很顺利.然而,当涉及到交换指向数据结构的指针时,我就迷路了。到目前为止我尝试过的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//c++ library header: xyz.h

#include <stdlib.h>

class CppLib {
 public:
  CppLib(unsigned int input);

  int * CreateArray();
};

//C++ library implementation: xyz.cpp
#include "xyz.h"

CppLib::CppLib(unsigned int input) {
    _input = input;
  }

int * CppLib::CreateArray() {
    int values = 5;
    int * myPointer = new int [values];
    for (unsigned i = 0; i < values; ++i) {
        myPointer[i] = i;
    }
    return myPointer;
}

接口实现如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//interface.h

int * CCreateArray();

//interface.cc
#include "../lib/xyz.h"

extern "C" {

  int * CCreateArray() {
    CppLib lib(1);
    return lib.CreateArray();
  }
}

最后,go实现看起来如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cgo_lib

// #cgo CFLAGS: -I../lib
// #cgo LDFLAGS: -L../lib -linterfacelib
// #include "interface.h"
import "C"

func GoCreateArray() *int {
    return *int(C.CCreateArray())
}

编译时,我会收到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cgo_lib
../cgo_lib/cgo_lib.go:13: cannot convert _Cfunc_CCreateArray() (type *C.int) to type int
../cgo_lib/cgo_lib.go:13: invalid indirect of int(_Cfunc_CCreateArray()) (type int)

所以我的问题是:如何在C++和Go之间交换指向数据结构的指针。上面我描述了从C++到将来的路,但我也对另一种方式感兴趣。

谢谢你提前帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 09:44:46

这里:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return *int(C.CCreateArray())

可以写成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return *((int)(C.CCreateArray()))

您正在取消引用一个int,这将导致:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
invalid indirect of int(_Cfunc_CCreateArray()) (type int)

在这句话里,只注意到这一部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(int)(C.CCreateArray())

您正在尝试将一个*C.int转换为一个int,它不能工作,因为第一个是指针,而第二个不是。

除此之外,@tadman在您问题的注释中提到的内存管理问题,Go并不像C那样将数组表示为指向其第一个元素的指针。

如果您想共享int的宽度,您必须对它们的宽度进行具体说明: Go中的int具有一个与拱形相关的宽度,以及一个C int

了解更多关于CGO:http://golang.org/cmd/cgo/的信息

一旦解决了所有这些问题,就必须进行如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s := make([]int32, 0, 0)

h := (*reflect.SliceHeader)((unsafe.Pointer)(&s))

h.Data, h.Len, h.Cap = P, L, L // see below

s = *(*[]int32)(h)

其中P是数组的Go uintptr,您在C++和L中创建的是数组的长度作为Go int

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

https://stackoverflow.com/questions/28566242

复制
相关文章
固态硬盘不能恢复吗_固态硬盘资料能恢复吗
固态硬盘(SSD)凭借超高速的读写速度在高端玩家中颇受欢迎,但是SSD硬盘也暴露出一些不成熟的表现,之前已有过固件门、性能下降等例子。Techgage网站最新的测试显示SSD硬盘在数据恢复方面遇到了新的挑战,这一问题在支持TRIM指令的固态硬盘上尤为严重。有鉴于此,编辑将这篇文章编译过来希望能引起玩家的重视。目前这一问题还没有别的评测加以佐证,笔者手头也没有固态硬盘可重复验证,希望正在使用固态硬盘的玩家在评论中多多探讨,并注意备份自己的重要数据。
全栈程序员站长
2022/11/05
2.4K0
linux 误删文件恢复_centos删除的文件能恢复吗
大家好,又见面了,我是你们的朋友全栈君。 本文参考http://write.blog.csdn.net/postedit?ticket=ST-491405-OGjDDusZeyMgVQ7bHW7f-p
全栈程序员站长
2022/09/25
7.2K0
linux 误删文件恢复_centos删除的文件能恢复吗
固态硬盘坏了怎么恢复数据恢复不了_笔记本固态硬盘坏了数据能恢复吗
今天的这篇经验和大家聊一聊关于固态硬盘坏了怎么恢复数据恢复的问题,希望能够帮助到有需要的朋友。
全栈程序员站长
2022/09/30
2.4K0
固态硬盘坏了怎么恢复数据恢复不了_笔记本固态硬盘坏了数据能恢复吗
实验探索: ChatGPT是好的推荐系统吗?
TLDR: 之前我们简单测试了下ChatGPT作为推荐器在序列推荐和可解释推荐上的能力,即如何利用ChatGPT实现推荐模型的能力?今天再跟大家分享一篇通过实验来探究ChatGPT通用推荐能力的文章,其在评分预测、序列推荐、直接推荐、解释生成和评论总结等五个推荐场景中测试了ChatGPT的推荐能力。
张小磊
2023/08/22
2660
实验探索: ChatGPT是好的推荐系统吗?
固态硬盘数据丢失能恢复吗?含泪分享:固态硬盘数据恢复方法
固态硬盘数据丢失能恢复吗?相信很多人在操作和使用固态硬盘的时候,不免会发生一些特殊情况,比如打开固态硬盘后,会询问你是否要对硬盘分区进行格式化。如果我们点击格式化的话,就会造成硬盘内部数据出现丢失的现象。有些时候又是数据无缘无故丢失导致我们一头雾水的同时又手足无措。总之无论是因为什么而导致的丢失数据,都要想办法找回来!
全栈程序员站长
2022/11/08
6.2K1
固态硬盘数据丢失能恢复吗?含泪分享:固态硬盘数据恢复方法
硬盘数据丢失能恢复吗 硬盘数据丢失怎么找回
硬盘是电脑的核心设备,被用来安装软件,储存数据,运行系统。在使用过程中,我们会遇到硬盘数据丢失的情况。今天小编给大家介绍一下,硬盘数据丢失能恢复吗,硬盘数据丢失怎么找回。
用户9208731
2023/03/29
2.7K0
硬盘数据丢失能恢复吗 硬盘数据丢失怎么找回
移动硬盘数据丢失能恢复吗 移动硬盘数据恢复用什么软件
移动硬盘是我们的学习,工作中常用的储存设备。它储量大。体积小,易携带,深受用户们的喜爱。在使用过程中,移动硬盘会因为一些原因导致数据丢失。那么,移动硬盘数据丢失能恢复吗,移动硬盘数据恢复用什么软件,小编今天给大家解答。
用户9208731
2023/01/01
2K0
移动硬盘数据丢失能恢复吗 移动硬盘数据恢复用什么软件
硬盘格式化后能恢复数据吗?硬盘格式化数据恢复方法
随着电脑办公的人越来越多,移动硬盘也逐渐成为一种很受欢迎的数据存储设备,它在我们的生活或者工作中提供了很多便利,对工作效率的提升也有帮助。但是,当我们移动硬盘空间不足时,我们就会删除一些数据,如果这时候不小心格式化了硬盘数据,这可怎么办?电脑硬盘格式化了怎么恢复数据?
用户10682816
2023/07/29
3110
[推荐系统读书笔记]好的推荐系统
在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情;作为信息生产者,如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。推荐系统就是解决这一矛盾的重要工具。
用户1631856
2018/12/05
8940
感觉染了之后为.malox勒索病毒如何应对?数据能恢复吗?
最近,91数据修复团队接到一家公司的请求,该公司的服务器上周遇上了.malox勒索病毒的攻击,导致SQL数据库库被添加,无法启动,库文件名也被坑改成了.mallox后缩。该公司急需91数据修复团队帮助修复数据。经过91数据修复工程师的检测分析,确定了数据修复的修复方案,并镶嵌帮助客户成功恢复数据,数据恢复率达到了100%,客户对团队的服务高度评价。
用户7824549
2023/04/19
9100
感觉染了之后为.malox勒索病毒如何应对?数据能恢复吗?
你有一个好的归档习惯吗?
备忘和扯一扯最近散仙在工作用到的几个不错的小技术点: (1)使用shell写了一个根据年份能生成此年份下归档文件目录,精确到年-月-日-小时 谈谈本意: 由于散仙最近是在搞我们平台的搜索日志分析的工作,日志记录的数据是存在我们的Hadoop集群的HDFS上,日志记录的形式,自然也是按照年月日小时这样一个目录存储的,至于为啥这么设计,通过时间维度来准确归档: 好处: 这样在分析数据时,便能任意指定时间范围来分析,最细精确到小时上,最大可按年统计,所以,例如最近1小时,3小时,最近7天,最近一个月,
我是攻城师
2018/05/11
8870
苹果不再奢侈,甩卖策略能拯救疲软的销量吗?
一直以来,苹果都是以高价高利的姿态在全世界售卖手机,然而随着华为、小米等国产手机的崛起,苹果的优势正在弱化,高价高利变得难以为继。
罗超频道
2019/03/06
5870
苹果不再奢侈,甩卖策略能拯救疲软的销量吗?
域名推荐哪种好,建设网站需要域名吗
能够拥有一个好的域名,是可以在网络上留住流量的,而且好的域名是很容易被人记住的,这在无形中起到了对企业的宣传作用。有些人可能正在准备注册域名,关于域名推荐哪种好?不会申请域名怎么办?相信很多人正面临着这样的难题。
用户8739990
2021/07/23
5.8K0
域名推荐哪种好,建设网站需要域名吗
MySQL主从复制虽好,能完美解决数据库单点问题吗?
要完成二进制日志的传输过程,MySQL会在从服务器上启动一个工作线程,称为IO线程,这个IO线程会跟主数据库建立一个普通的客户端连接,然后在主服务器上启动一个特殊的二进制转储线程称为binlogdown线程。
猿哥
2019/03/13
1.5K0
MySQL主从复制虽好,能完美解决数据库单点问题吗?
2、从库的IO线程在指定位置读取主库binlog内容存储到本地的中继日志(Relay Log)中
lyb-geek
2019/03/07
2.2K0
MySQL主从复制虽好,能完美解决数据库单点问题吗?
2024年常用的数据恢复软件推荐
在现代社会中,我们越来越依赖于电子设备来保存和管理我们的个人和工作数据。然而,数据丢失的风险也随之增加。无论是由于误删除、硬件故障、病毒感染还是其他原因,数据丢失对我们造成的损失都是不可忽视的。因此,具备一款可靠的、专业的数据恢复软件是非常有必要的。本文将向大家推荐几款值得信赖的专业数据恢复软件,以帮助您在数据丢失时做出正确的选择。
用户7704932
2024/01/19
5340
2024年常用的数据恢复软件推荐
求助~有人能帮我看看这个程序是咋回事吗?
本来我也不以为意的,只是简简单单的觉得自己敲代码敲的走火入魔了而已,搞得我梦里还在疯狂的输出。
why技术
2023/01/08
3220
论文推荐:大型语言模型能自我解释吗?
这篇论文的研究主要贡献是对LLM生成解释的优缺点进行了调查。详细介绍了两种方法,一种是做出预测,然后解释它,另一种是产生解释,然后用它来做出预测。
deephub
2023/12/28
1570
论文推荐:大型语言模型能自我解释吗?
免费绿色的电脑硬盘数据恢复软件哪个好?
硬盘作为电脑里必不可少的硬件之一,装载了电脑的一切数据文件,一旦硬盘出现了问题,很多重要东西也随之出现问题,造成重要数据文件丢失、缺失等问题,在我们日常生活中,常常会因为硬盘空间太小而烦恼。我们只能选
用户7442547
2022/08/25
3.9K0
好物推荐
当一个阵列硬盘组不合适,我唯一想到的就是一个智能的硬盘盒了额,售价108元,不过固态硬盘感人的价格.我也是实在不知道这个东西的用处在哪里.看商品得定位是SSD的解决方案.可以支持到2T.
云深无际
2021/04/14
7.7K0
好物推荐

相似问题

sharepoint REST API -共享文档

121

Sharepoint文档库文件夹

13

在Sharepoint中显示特定共享文档文件夹的通知

115

如何使用版本控制将文档从SharePoint 2003移动到SharePoint 2007?

36

将共享文档子文件夹作为SharePoint中的webpart部件放置

81
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文