2017-05-08 37 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来解决问题。