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
C APIを提供していますか?もしそうでなければ、IIRCがC++ライブラリで動作するCythonのようなコンパイルされたインタフェースを使うほうが良いでしょう。 ctypesは、標準のCデータ型と呼び出し規約を使用するライブラリであり、 'std :: string'などのC++型ではありません。 – eryksun
@eryksun、いいえ、C APIはありません。私は同様の結果でCythonを試しました。私はこのポストでそれを言及するか、この投稿を破棄し、私のCythonの試みを記述する新しいものを作るべきですか? –
私はCythonで動作させることに集中します。 ctypesは、コンパイルされたCアダプター・インターフェースでC++ライブラリーをラップすることなく、役立つことはありません。コンパイラが必要な場合は、Cythonを使用することもできます。 – eryksun