问题标签 [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.
com - 如何从 Go 进行 stdcall
我有一个指向 COM 接口的指针,并且想从它的虚拟表中获取函数指针并进行方法调用。为此,我需要进行 stdcall 方法调用。在 Go 中,如何使用约定 stdcall 进行调用或使用 cgo 中的约定 stdcall 进行调用?
go - 我可以将 cgo 与 Windows SDK 一起使用吗?
我刚刚尝试过 tdm-gcc 并且它可以工作,但是可以将 cgo 与 Windows SDK 一起使用吗?
garbage-collection - 有没有办法在收集 Go 结构时释放非托管资源?
我有一个指向由 Go 结构包装的 C 类型的指针,如下所示:
C 类型又具有以下功能:
有没有一种方法可以确保在实例完成free_c_type
时调用它?Wrapper
go - 访问 C 联合字段时的问题
我想访问 Go 中的 C union 字段。以下是我的源代码,但编译时出现错误:
当我构建时,出现如下错误:
bc undefined(类型 *[8]byte 没有字段或方法 c)
谁能告诉我访问联合字段的正确方法?
go - 错误:从 C 构建示例时无法确定 C.stdout 的名称类型?去?加油!文章
我正在尝试从C 构建以下示例?去?加油!:
我在 Win7 64 上运行 Go,并使用来自http://tdm-gcc.tdragon.net/的 GCC 的 64 位版本, 在 Linux 上运行它不是一种选择。
我得到的错误是:
我无法找到有关此消息的任何文档,而且 Google 上显示的点击率也很少。
有人对造成这种情况的原因有任何想法吗?提前致谢!
go - CGO;C函数有int指针参数,如何传递正确的类型?
目前我正在使用 Cgo 从 Go 调用 C 函数。我正在尝试在 Go中重新创建“阅读照片”示例。
然而,一个关于 C 函数的函数需要一个int* len
参数(额外的问题;是否与 相同int *len
?)。当我读到这篇文章时,这是一个指向整数的指针。有问题的函数是ccv_write
libccv 库的。它的完整签名是:
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
关于如何传递正确论点的任何想法?
go - 如何在 golang 中包装 zlib?
我试图通过使用 cgo 从 golang 调用 c zlib 来修复 golang 最慢的 zip 实现
但我得到一个错误
错误:“deflateInit”未声明(在此函数中首次使用)
deflateInit 在 zlib.h 中定义
我错过了什么吗?感谢您的任何提示。
go - Go/CGo - 你如何使用作为指针传递的 C 数组
我将其作为问题/答案发布,因为我花了一段时间才解决,而且我不介意对我的解决方案提供一些反馈。在 Go/CGo 中,如何处理作为指针传递的 C 数组?
例如,使用这个 C 结构:
我想将 oid 字段转换为 Go 字符串,如何使用 guint32* 指针?
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 的大小是一个字节。也就是说,感谢您的回复。我能够根据自己的需要调整接受的答案。
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 to
XScreenSaverAllocInfo' /tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o 中:在函数_cgo_c0e279f6f16e_Cfunc_XScreenSaverQueryInfo': ./x11.go:65: undefined reference to
XScreenSaverQueryInfo' collect2: error: ld returned 1 exit status
我究竟做错了什么?