澄清:似乎没有将 GO 映射作为多维数组发送到 C 函数的记录示例。这个问题旨在为从 GO 发送数据集合到 C 的任何人找到一个通用的解决方案。
问题: 我在 Go 中有一个 map[string]string,我希望在 C++ 中迭代这个键/值对。
在 GO 中,我有以下内容来创建多维数组
var argv = make([][]*C.char, len(keypairs))
count := 0
for key, val := range keypairs {
var argv2 = make([]*C.char, 2)
csKey := C.CString(key)
csVal := C.CString(val)
argv2[0] = csKey
argv2[1] = csVal
argv[count] = argv2
count++
C.free(unsafe.Pointer(csKey))
C.free(unsafe.Pointer(csVal))
}
C.writeKeyValuePairs(&argv[0])
然后在 C++ 中我有:
bool writeKeyValuePairs(char * pairs[][2]) {
...
}
结果是: cannot use _cgo1 (type *[]*_Ctype_char) as type *[2]*_Ctype_char in argument
更新@kostix: 这是现在的位置:
var argv = make([][2]*C.char, len(tags))
i := 0
for key, val := range tags {
var argv2 = new([2]*C.char)
argv2[0], argv2[1] = C.CString(key), C.CString(val)
argv[i] = argv2
i++
}
C.writeKeyValuePairs(&argv[0])
错误是: Cannot use 'argv2' (type *[2]*C.char) as type [2]*C.char
郎朗坤
慕运维8079593
相关分类