我正在尝试使用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传递的东西。任何建议表示赞赏
谢谢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'))