2012-02-24 65 views
3

從出口的.so C函數返回我有一個liba.so包含函數say_hi()檢索`字符*`從Python中

char *say_hi() 
{ 
    return "hello, world"; 
} 

在Python中,我通過​​訪問liba.so

>>>liba = ctypes.CDLL("./liba.so") 
>>>liba.say_hi() 
16422018 

如何檢索Python中liba.say_hi()返回的字符串"hello, world"

PS

此外restype,任何其他方式?

+0

http://docs.python.org/library/ctypes.html#return-types – Matthias 2012-02-24 08:19:19

回答

2

的Python的ctypes的模塊的文檔提供的類型轉換功能。例如。 c_char_p

表示指向零終止字符串時的C char *數據類型。對於也可指向二進制數據的通用字符指針,必須使用POINTER(c_char)。 構造函數接受一個整數地址或一個字節對象。

那麼試試這個:

ctypes.c_char_p(liba.say_hi()) 

PS:它建立不可改變的字符串。對於易變的看看create_string_buffer 頁面上也有一些自描述的exameple。

+0

非常愛你,沒錯。 :-) – Alcott 2012-02-24 08:27:05

3
+0

確實如此。 :-),除了'restype',還有其他方法嗎? – Alcott 2012-02-24 08:20:34

+0

爲什麼有必要? Python不能從C中推斷出類型。最好的答案就是告訴python返回類型是什麼。這可能是幾乎所有情況下最好的方法。 – Matimus 2012-02-24 08:24:34

+0

謝謝,只是尋求其他方式來完成這項工作,似乎這是最好的方法。 – Alcott 2012-02-24 08:25:34