c++ - C++ to Go using SWIG:如何将 C++ 指针传递给 Go?
问题描述
请参阅下面的代码,我将解释
int* Camera::retrieveDataPointerPerBuffer() {
int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
int* pSrc = cameraData;
return cameraData;
} //camera.cpp
上面的代码有 int 指针 pSrc 指向数组然后返回。这是 C++ 中的一个函数。接下来,我使用 SWIG 来封装这个 C++ 函数,以便我可以在 Go 中调用它。以下代码演示了在 Go 中调用的函数。
func myCamera() {
cam := camera.NewCamera()
pSrc := cam.RetrieveDataPointerPerBuffer()
for i := 0; i < 10; i++ {
fmt.Println("%d", pSrc)
}
} //main.go
注意:我知道我不能在 Go 中迭代指针。但是有什么办法吗?
输出:0
问题:如何通过从 C++ 到 Go 的指针访问数组元素?附加信息:这是我正在处理的一个大型项目的简化版本。我必须返回这个指针,我不能返回一个向量。
如果您需要我为您澄清任何事情,请告诉我。
解决方案
@JimB 感谢您提供的所有资源。我想通了,这似乎可以解决问题。
int* Camera::retrieveDataPointerPerBuffer() {
int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
int* pSrc = cameraData;
return cameraData;
} //camera.cpp
下面包含我所做的更改
func myCamera() { //For Goroutine
cam := camera.NewCamera()
pSrc := cam.RetrieveDataPointerPerBuffer()
arraySize := 10
slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]
fmt.Println(slice)
}
输出:[1、2、3、4、5、6、7、8、9、10]
后续问题:有人介意解释这行代码吗?
slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]
推荐阅读
- omnet++ - 有没有在 omnet++ 中创建 WirelessHost 类型的动态模块的示例?
- c# - 如何为BackgroundService传递参数?
- c# - 将图像保存到asp.net c#中的文件夹时出现二进制格式错误
- javascript - 使用外部视频播放器源关闭时在纯 css 模态中暂停视频
- java - 从数据库到选择框的可观察列表
- javascript - 从 HTML 表中读取数据的 JavaScript
- c# - 在现实世界的 asp.net 核心网络应用程序中,signalR USER COUNT 或 HUB COUNT 限制是什么?
- h2o - h2o.ensemble,给出错误 java.lang.NullPointerException
- c# - 如何使用 C# 获取泰国的当前日期时间
- vba - 从 SharedMailbox 文件夹获取电子邮件