C 使用SWIG:如何将C 指针传递到
C++ to Go using SWIG: How to pass C++ pointers to Go?
请参见下面的代码,我将解释
int* Camera::retrieveDataPointerPerBuffer() {
int cameraData [10] = {1,2,3,4,5,6,7,8,9,10};
int* pSrc = cameraData;
return cameraData;
} //camera.cpp
上面的代码具有插入指针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 指针访问数组元素?其他信息:这是我正在从事的较大项目的简化版本。我必须返回此指针,我不能返回向量。
让我知道您是否需要我为您澄清任何东西。
@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]
相关文章:
- 尝试通过共享指针使用变量时读取访问冲突
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 通过指针使用C++还原char数组时出现问题
- 使用C++智能指针使用父指针构建树
- 使用指针使用过滤器重写字符数组
- C++对自动(堆栈)指针使用运算符删除
- 'void *' 'void (*) (bool)' 指针使用 c ++ 编译器在 C 中编译文件的错误
- 不能对基于数组的指针使用数组运算符(读取访问冲突)
- 如何为const char double指针(使用新的)动态分配内存
- 使用指针使用矢量对象的函数
- 如何从此类实例上的指针使用类的方法
- 派生的类指针使用static_cast指向基类对象
- 如何将带有恒定指针作为参数的模板的派生指针使用
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- C功能指针使用C 11 lambdas
- 使用指针使用Traversal来检查是否重复字符串
- 基础类指针使用已分配的内存来派生类指针
- 由于指针使用不当而导致的未上线异常
- 为什么类实例作为指针使用堆而不使用堆栈
- C++本地对象超出范围,返回指针(使用new分配的内存).因此内存泄漏