Exception: access violation reading при вызове функции С из Python
Я хотел немного поиграться с Python C Api. Но стукнулся с ошибкой.
OSError: exception: access violation writing 0x0000000000000020
Ошибка происходит на строчки PyObject_RichCompare(first, second, Py_LT)
В переменных first и second ошибок вроде нет. Если убрать строчку PyObject_RichCompare(first, second, Py_LT) все работает.
Пробовал собирать "DLL" и на Linux в GCC и на Windows в Visual Studio. Везде получаю эту ошибку
Код на С
#include "Python.h"
extern "C" {
__declspec(dllexport)
long test(PyObject* list) {
PyObject* first, * second;
int t = PyList_Size(list);
first = PyList_GetItem(list, 0);
second = PyList_GetItem(list, 1);
PyObject* result = PyObject_RichCompare(first, second, Py_LT);
return PyLong_AsLong(first) + PyLong_AsLong(second);
}
}
И на Python
import ctypes
lib = ctypes.CDLL('please.dll')
lib.test.restype = ctypes.c_long
lib.test.argtypes = [ctypes.py_object]
py_values = [1, 645, 546, 8646, 45646, 6545688, 5465]
a = lib.test(py_values)
print(a)
Ответы (1 шт):
Автор решения: Massa7ca
→ Ссылка
Я должен был использовать
lib = ctypes.PyDLL('please.dll')
вместо
lib = ctypes.CDLL('please.dll')