2017-05-08 3 views
0

いくつかの関数を呼び出し、サードパーティの共有ライブラリからJSON応答(ユニコード文字列)を取得するPythonプログラムを作成する必要があります。おそらく、ライブラリはC++で書かれています。ライブラリは以下含むヘッダファイルました:サードパーティの共有ライブラリとPythonのctypeの統合

#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 
}; 
} 

はここで(2.7および3.xの両方を試してみました)私はPythonで書いたものです:

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を提供していますか?もしそうでなければ、IIRCがC++ライブラリで動作するCythonのようなコンパイルされたインタフェースを使うほうが良いでしょう。 ctypesは、標準のCデータ型と呼び出し規約を使用するライブラリであり、 'std :: string'などのC++型ではありません。 – eryksun

+0

@eryksun、いいえ、C APIはありません。私は同様の結果でCythonを試しました。私はこのポストでそれを言及するか、この投稿を破棄し、私のCythonの試みを記述する新しいものを作るべきですか? –

+0

私はCythonで動作させることに集中します。 ctypesは、コンパイルされたCアダプター・インターフェースでC++ライブラリーをラップすることなく、役立つことはありません。コンパイラが必要な場合は、Cythonを使用することもできます。 – eryksun

答えて

0

エリクソンのおかげで、C++のデータ型でctypesを使用することはできません。 Cythonを使って問題を解決しよう。

関連する問題