作者QuankonXD (关公)
看板Python
标题[问题] 在C++中PyList_Size的问题
时间Thu Dec 1 15:47:18 2016
我用python import ctypes来读取我用C++写成的dll档
有以下两个问题不知如何解决
我的<List.py>档都是这样写的
<List.py>
import ctypes
dll = ctypes.CDLL('List.dll')
dll.test.restype = ctypes.py_object
dll.test.argtypes = [ctypes.py_object]
l=[1.11,2.22,3.33]
print (dll.test(l))
问题一:
<List.cpp>
#include <Python.h>
#include <iostream>
using namespace std;
extern "C" {
__declspec(dllexport) PyObject *test(PyObject *arg) {
cout << "Number of items: " << endl;
return Py_None;
}
}
这样写最後输出会出现 "Number of items: " ,但是程式是没有回应的停止运作。
如果改成return arg ,输出会变成 "Number of items: "、[1.11,2.22,3.33],正常。
请问Py_None这样用不对吗?
问题二:
<List.cpp>
#include <Python.h>
#include <iostream>
using namespace std;
extern "C" {
__declspec(dllexport) PyObject *test(PyObject *arg) {
cout << PyList_Size(arg, 1) << endl;
cout << "Number of items: " << endl;
return arg;
}
}
这样写最後输出只出现OSerror,连 "Number of items: " 都没有了
PyList_Size()这个语法应该是没有错的吧,为什麽还有OSerror
拜托大家帮我解答QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.235.49.198
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1480578440.A.5A0.html
1F:→ QuankonXD: 附注:我用Python 3.5 12/01 16:26
2F:→ anotherday: PyList_Size是 len(list)吧? 你是想印出第一个元素吗? 12/01 16:56
3F:→ anotherday: function最後return那行改成 Py_RETURN_NONE 12/01 17:02
4F:→ QuankonXD: 我想得到这个list的长度,当然也想得到里面的元素 12/01 17:55
5F:→ uranusjr: 你去查 Py_None 的文件就写得很清楚了, 加油好吗... 12/01 21:21
7F:→ QuankonXD: 不好意思,因为我两个方法都试过了QQ 还是停止回应 12/01 21:28
8F:→ gozule: 如果是要用让python使用c++写好的函式库,为何不用cython? 12/02 11:13
9F:→ gozule: 方便又省事 12/02 11:13