Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过c++;标准::向量<;结构>;使用Qt-python_Python_C++_C_Qt_Struct - Fatal编程技术网

通过c++;标准::向量<;结构>;使用Qt-python

通过c++;标准::向量<;结构>;使用Qt-python,python,c++,c,qt,struct,Python,C++,C,Qt,Struct,我正在用Python开发一个小Qgis插件。这个插件加载C++ DLL并使用它的方法。现在,其中一个方法返回一个std::vector,我不知道如何在Python中处理它。我读了很多问题,但找不到任何解决办法。我正在使用嵌入qgis开发者(OSGeo)的Python 2.7和用于GUI的pyqt4 方法签名为: extern "C"{ __declspec(dllexport) std::vector<MyStruct> loadValues(); } Python代码是

我正在用Python开发一个小Qgis插件。这个插件加载C++ DLL并使用它的方法。现在,其中一个方法返回一个
std::vector
,我不知道如何在Python中处理它。我读了很多问题,但找不到任何解决办法。我正在使用嵌入qgis开发者(OSGeo)的Python 2.7和用于GUI的pyqt4

方法签名为:

extern "C"{
    __declspec(dllexport)  std::vector<MyStruct> loadValues();
}
Python代码是:

 mydll = cdll.LoadLibrary('mydll.dll')
 array = []
 array = mydll.loadValues()

有人会帮助我吗?< /P>我认为Cytys>代码>如果C库中C++库由于函数重载而复杂,类方法无法加载 DLOpen[](/Cord>),所以这只是C语言。您可以总是为Python编写C或C++模块。严重地,DLL不应该返回STL类型,或者任何类型的动态内存管理。不管它是不是Python。许多原因,其中最普遍的是,你必须确保调用方使用的是完全相同的代码<矢量>代码>,使用向量使用的相同堆,等等。你最好的办法是使用C样式数组,并将其加载到C++包装器中。因为vector有一个内部结构,它是特定于实现的,所以不太可能使用cType。@ cDakes,IMO最好使用SWIG()或类似的方法,在C++代码周围写一个C包装器。并向调用的Python代码返回一个Python

list
。我不明白为什么您首先要使用SWIG,然后编写一个C包装器@AndrewHenle。我不太熟悉SWIG(我知道Boo.python),但是它应该足够用它来从C++ DLL创建Python模块。
 mydll = cdll.LoadLibrary('mydll.dll')
 array = []
 array = mydll.loadValues()