У меня есть генератор событий из двух частей:
pyglobalexe (заглушка для имитации событий) :
#pragma comment(lib, "pyglobalextension.lib")
#include <Python.h>
__declspec(dllimport) PyObject* PyInit_pyglobalextension;
__declspec(dllimport) PyObject* event_queue;
int main() {
int i;
for(i=0; i<10; i++) {
PyObject_CallMethod(event_queue, "put", "O", PyLong_FromLong(i*2));
}
return 0;
}
pyglobalextension
#include <Python.h>
__declspec(dllexport) PyObject *event_queue = NULL;
static PyObject *
set_queue(PyObject *self, PyObject *args)
{
PyObject *temp;
if(!PyArg_ParseTuple(args, "O", &temp)){
return NULL;
}
Py_XINCREF(temp);
Py_XDECREF(event_queue);
event_queue = temp;
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef PyGlobalExtensionMethods[] = {
{"set_queue", set_queue, METH_VARARGS, "Set a queue global."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef PyGlobalExtensionModule = {
PyModuleDef_HEAD_INIT,
"pyglobalextension",
NULL,
-1,
PyGlobalExtensionMethods
};
PyMODINIT_FUNC
PyInit_pyglobalextension(void)
{
return PyModule_Create(&PyGlobalExtensionModule);
}
Оба файла компилируются нормально.pyglobalexe.exe вылетает при вызове PyObject_CallMethod
.Что мне нужно изменить, чтобы я мог использовать глобальный event_queue из pyglobalextension в pyglobalexe?
=== РЕДАКТИРОВАТЬ ===
Извините, мне следовало бы прояснить пример использования.
Командная строка 1 (работает python.exe)
>>> import pyglobalextension
>>> from queue import Queue
>>> q = Queue()
>>> pyglobalextension.set_queue(q)
Командная строка 2 (как только я закончу в командной строке 1).
$> pyglobalexe
Я надеялсячто я смогу вернуться к командной строке 1 и q.get () 10 номеров.