0
我需要編寫一個Python程序來調用某些函數,並從第三方共享庫中獲取JSON響應(一個unicode字符串)。據推測該庫是用C++編寫的。圖書館有含以下一個頭文件:將第三方共享庫與Python ctypes集成
#include <string>
#include <ExportLib.h>
// some code ignored here
typedef std::string UString;
using namespace std;
namespace ns1{
class DLL_PUBLIC S_API {
public:
static UString function1();
static UString function2();
// some code ignored here
};
}
這是我在Python寫的(都嘗試2.7和3.x):
from ctypes import *
lib1 = CDLL('lib1.so')
func1 = lib1.function1
func1.restype = c_wchar_p
result = func1()
print(result)
,而不是顯示JSON但是,該代碼顯示的問題分數。我曾嘗試以下,但我得到一個段錯誤:
func1.restype = POINTER(c_wchar_p)
result = func1()
result1 = wstring_at(result)
請點我在正確的方向,因爲我不是一個很好的程序員。
UPD:忘了提及,我正在開發一個Linux系統。 UPD2:爲了解決這個需要使用Cython,感謝erykson
它提供了一個C API嗎?如果不是的話,那麼使用Cython這樣的編譯接口會更好,IIRC可以使用C++庫。 ctypes僅適用於使用標準C數據類型和調用約定的庫,而不是諸如'std :: string'之類的C++類型。 – eryksun
@eryksun,不,它沒有任何C API。我曾嘗試過類似結果的Cython。我應該在這篇文章中提到它還是放棄這篇文章,然後製作一份描述我的Cython嘗試的新文章? –
我會專注於讓它與Cython一起工作。 ctypes不會幫助,而不是沒有用編譯的C適配器接口包裝C++庫。如果你需要一個編譯器,你可以使用Cython。 – eryksun