- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
#ifndef _TOGGLE_H_
#define _TOGGLE_H_
#include <winbase.h>
#include "Python.h"
#define ID(X) "id(" #X ")"
#define SET_OBJ_POINTER(OBJ, NAME)\
OBJ = (PyObject *)PyLong_AsLong\
(PyRun_String(ID(NAME), Py_eval_input,\
PyEval_GetGlobals(), PyEval_GetLocals()))
//////////////////////////////////////////////////////
PyObject * __Py_None__;
PyObject * __Py_True__;
PyObject * __Py_False__;
PyObject * __Py_NotImplemented__;
#undef Py_None
#undef Py_True
#undef Py_False
#undef Py_NotImplemented
#define Py_None __Py_None__
#define Py_True __Py_True__
#define Py_False __Py_False__
#define Py_NotImplemented __Py_NotImplemented__
//////////////////////////////////////////////////////
static void initToggle(void) {
SET_OBJ_POINTER(Py_None, None);
SET_OBJ_POINTER(Py_True, True);
SET_OBJ_POINTER(Py_False, False);
SET_OBJ_POINTER(Py_NotImplemented, NotImplemented);
}
int WINAPI DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved) {
initToggle();
return 1;
}
#endif
Раскопал на старой флешке костыль, позволяющий компилить сишные модули для питона прям на кпк под WinMobile с помощью портанутой gcc. Была там бага - не видел собранный модуль Py_None, Py_True и т.д из python.dll. При помощи макроса SET_OBJ_POINTER приходилось вытаскивать указатели на них.