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

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

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

  2. 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.h


int * 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 的方式,但我也对相反的方式感兴趣。


非常感谢您的帮助。


慕勒3428872
浏览 161回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go