我正在尝试使用ctypes将多字符字符串从Python发送到C ++。但是,只会传递每个字符串的第一个字符。
这是Python中的调用:
ctypes.cdll.LoadLibrary(os.path.abspath("nodispersion.so"))
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion('teststring')
以及我在C ++中的定义方式
extern "C" void nodispersion(char* test)
{
cout << "print test " << test << "\n";
}
仅打印“ t”。
其他类型(例如int)也可以通过。另外,如果我在c ++中定义char *,它可以很好地打印,因此我认为它是从Python传递过来的东西。任何建议表示赞赏。
答案 0 :(得分:0)
感谢狄龙·戴维斯(Dillon Davis):
尝试ctypes.CDLL(os.path.abspath('nodispersion.so'))。nodispersion(b'teststring')。注意b
这在传递字符串'teststring'
但是我然后想传递一个以前在Python中定义为变量的字符串。这可以通过使用bytes
函数并将编码定义为'utf8'来解决:
a = 'teststring'
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion(bytes(a, encoding='utf8'))