是否可以在go共享库中返回指向结构的指针?

问题描述 投票:2回答:1

我正在尝试使用Go在Windows中创建可以导入Python的dll,但是导出函数返回指向Go结构的指针时遇到了一些问题。以下是一个非常简化的示例:

package main

import "C"

type data struct {
    value1, value2 int
}

type PData *data

//export Callme
func Callme() PData {
    var d PData = new (data)
    return d
}

//export getValue1
func getValue1 (st PData) int {
   return st.value1
}

func main() {
}

注意我还创建了一个指针类型,希望它最终可以作为C端的简单句柄。为了让C端访问该结构,我将在运行侧提供帮助程序(我提供一个示例),该例程将指向该结构的指针作为参数。不幸的是,上面的代码无法编译:

go build -o main.dll -buildmode=c-shared .\main.go
# command-line-arguments
.\main.go:5:11: Go type not supported in export: struct {
     value1, value2 int
}
.\main.go:5:11: Go type not supported in export: struct {
    value1, value2 int
}
.\main.go:5:11: Go type not supported in export: struct {
    value1, value2 int
}
.\main.go:5:11: Go type not supported in export: struct {
    value1, value2 int
}

这是Go的限制吗?我尝试了简单的返回值,例如int和floats,它们工作正常。

有什么解决方法吗?

go cgo
1个回答
1
投票

基于https://golang.org/cmd/cgo/#hdr-C_references_to_Go

不支持Go结构类型;使用C结构类型。

也请查看以下Github问题:https://github.com/golang/go/issues/18412

© www.soinside.com 2019 - 2024. All rights reserved.