检索从Python中从.so导出的C函数返回的`char *`

时间:2012-02-24 08:12:37

标签: python c

我得到了一个包含函数liba.so的{​​{1}},

say_hi()

在Python中,我通过char *say_hi() { return "hello, world"; }

访问了liba.so
ctypes

如何在Python中检索>>>liba = ctypes.CDLL("./liba.so") >>>liba.say_hi() 16422018 返回的字符串"hello, world"

PS

除了liba.say_hi(),还有其他任何方式吗?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

Python ctypes-modules的文档提供了类型转换功能。例如。 c_char_p

  

表示指向以零结尾的字符串的C char *数据类型。对于也可能指向二进制数据的通用字符指针,必须使用POINTER(c_char)。 构造函数接受整数地址或字节对象。

所以试试这个:

ctypes.c_char_p( liba.say_hi() )

PS:它构建了不可变的字符串。对于可变的,请查看create_string_buffer 页面上还有一些自我描述性的exameples。