为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕勒3428872 2021-09-13 17:01:44
我正在尝试将 C++ 库连接到用 Go 编写的应用程序服务器。目标是 C++ 库和应用程序服务器都在处理一个通用的数据结构,这意味着:Go 应用服务器可以访问由 C++ 库创建的数组。C++ 库可以处理由 Go 应用服务器创建的数组。我在玩 cgo 并连接 C++,到目前为止一切正常......但是,当涉及到交换指向数据结构的指针时,我迷路了。到目前为止我尝试过的://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;}接口实现如下所示://interface.hint * CCreateArray();//interface.cc#include "../lib/xyz.h"extern "C" {  int * CCreateArray() {    CppLib lib(1);    return lib.CreateArray();  }}最后,go 实现如下所示:package cgo_lib// #cgo CFLAGS: -I../lib// #cgo LDFLAGS: -L../lib -linterfacelib// #include "interface.h"import "C"func GoCreateArray() *int {    return *int(C.CCreateArray())}编译时我收到以下错误:# 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++ 到 GO 的方式,但我也对相反的方式感兴趣。非常感谢您的帮助。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信