2017-05-08 34 views
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

+0

它提供了一個C API嗎?如果不是的話,那麼使用Cython這樣的編譯接口會更好,IIRC可以使用C++庫。 ctypes僅適用於使用標準C數據類型和調用約定的庫,而不是諸如'std :: string'之類的C++類型。 – eryksun

+0

@eryksun,不,它沒有任何C API。我曾嘗試過類似結果的Cython。我應該在這篇文章中提到它還是放棄這篇文章,然後製作一份描述我的Cython嘗試的新文章? –

+0

我會專注於讓它與Cython一起工作。 ctypes不會幫助,而不是沒有用編譯的C適配器接口包裝C++庫。如果你需要一個編譯器,你可以使用Cython。 – eryksun

回答

0

感謝eryksun,我發現使用ctypes和C++數據類型是不可能的。打算使用Cython來解決問題。