使用ctypes将字符串从python传递到c ++ - 只发送第一个字符

问题描述 投票:1回答:1

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

python c++ char ctypes
1个回答
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'))
© www.soinside.com 2019 - 2024. All rights reserved.