问题标签 [cgo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
973 浏览

com - 如何从 Go 进行 stdcall

我有一个指向 COM 接口的指针,并且想从它的虚拟表中获取函数指针并进行方法调用。为此,我需要进行 stdcall 方法调用。在 Go 中,如何使用约定 stdcall 进行调用或使用 cgo 中的约定 stdcall 进行调用?

0 投票
1 回答
399 浏览

go - 我可以将 cgo 与 Windows SDK 一起使用吗?

我刚刚尝试过 tdm-gcc 并且它可以工作,但是可以将 cgo 与 Windows SDK 一起使用吗?

0 投票
1 回答
706 浏览

garbage-collection - 有没有办法在收集 Go 结构时释放非托管资源?

我有一个指向由 Go 结构包装的 C 类型的指针,如下所示:

C 类型又具有以下功能:

有没有一种方法可以确保在实例完成free_c_type时调用它?Wrapper

0 投票
1 回答
838 浏览

go - 访问 C 联合字段时的问题

我想访问 Go 中的 C union 字段。以下是我的源代码,但编译时出现错误:

当我构建时,出现如下错误:

bc undefined(类型 *[8]byte 没有字段或方法 c)

谁能告诉我访问联合字段的正确方法?

0 投票
2 回答
5794 浏览

go - 错误:从 C 构建示例时无法确定 C.stdout 的名称类型?去?加油!文章

我正在尝试从C 构建以下示例?去?加油!

我在 Win7 64 上运行 Go,并使用来自http://tdm-gcc.tdragon.net/的 GCC 的 64 位版本, 在 Linux 上运行它不是一种选择。

我得到的错误是:

我无法找到有关此消息的任何文档,而且 Google 上显示的点击率也很少。

有人对造成这种情况的原因有任何想法吗?提前致谢!

0 投票
3 回答
10000 浏览

go - CGO;C函数有int指针参数,如何传递正确的类型?

目前我正在使用 Cgo 从 Go 调用 C 函数。我正在尝试在 Go中重新创建“阅读照片”示例。

然而,一个关于 C 函数的函数需要一个int* len参数(额外的问题;是否与 相同int *len?)。当我读到这篇文章时,这是一个指向整数的指针。有问题的函数是ccv_writelibccv 库的。它的完整签名是:

int ccv_write(ccv_dense_matrix_t* mat, char* out, int* len, int type, void* conf)

相关代码片段如下:

上面的示例生成以下编译时错误:cannot convert &x (type *int) to type *_Ctype_int

关于如何传递正确论点的任何想法?

0 投票
1 回答
1564 浏览

go - 如何在 golang 中包装 zlib?

我试图通过使用 cgo 从 golang 调用 c zlib 来修复 golang 最慢的 zip 实现

但我得到一个错误

错误:“deflateInit”未声明(在此函数中首次使用)

deflateInit 在 zlib.h 中定义

我错过了什么吗?感谢您的任何提示。

0 投票
3 回答
9316 浏览

go - Go/CGo - 你如何使用作为指针传递的 C 数组

我将其作为问题/答案发布,因为我花了一段时间才解决,而且我不介意对我的解决方案提供一些反馈。在 Go/CGo 中,如何处理作为指针传递的 C 数组?

例如,使用这个 C 结构:

我想将 oid 字段转换为 Go 字符串,如何使用 guint32* 指针?

0 投票
2 回答
2903 浏览

go - 如何在 go 中从 [][]byte 转换为 **char

我想从 go [][]byte 转换为 C **char。换句话说,我在 go 中有一个字节矩阵,我想在 C 中将其转换为 char 双指针。

请假设我必须有一个 [][]byte 作为输入和一个 **char 作为输出。

我知道可以通过执行以下操作将 []byte 转换为 *char:

但似乎不可能将这种情况扩展到第二维。我已经尝试了一些非常精细的方法,我将一个 [][]byte 打包到一个新的 []byte 中。然后我将该 []byte 发送到一个 C 函数,该函数使用指针算法创建一个 **char 以指向正确位置的新 []byte。

这种转换给了我奇怪的行为,我的数据在几次迭代中是正确的,但在函数调用之间似乎被破坏了。

如果有人有任何想法,我将不胜感激。

从我看到的回复中,声明我正在使用原始数据而不是字符串也很重要。因此是 go 字节类型。因此,如果添加 C 字符串终止符,原始数据将被破坏。我只是使用 C **char,因为 char 的大小是一个字节。也就是说,感谢您的回复。我能够根据自己的需要调整接受的答案。

0 投票
2 回答
2871 浏览

linker - go + cgo 和链接

我想使用以下 c 作为 Go 的 cgo:

构建:

我为 Go 的 cgo 重写了该代码:

尝试编译:

但是我收到链接器错误:

/tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o:在函数_cgo_c0e279f6f16e_Cfunc_XScreenSaverAllocInfo': ./x11.go:52: undefined reference toXScreenSaverAllocInfo' /tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o 中:在函数_cgo_c0e279f6f16e_Cfunc_XScreenSaverQueryInfo': ./x11.go:65: undefined reference toXScreenSaverQueryInfo' collect2: error: ld returned 1 exit status

我究竟做错了什么?