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')
→ Ссылка