2016-04-27 01:56:16 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
typedef void* PyObject;
|
|
|
|
typedef void* PyThreadState;
|
|
|
|
typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum { PyGILState_LOCKED, PyGILState_UNLOCKED } PyGILState_STATE;
|
|
|
|
|
|
|
|
const int Py_single_input = 256;
|
|
|
|
const int Py_file_input = 257;
|
|
|
|
const int Py_eval_input = 258;
|
|
|
|
|
|
|
|
const int METH_VARARGS = 0x0001;
|
|
|
|
|
|
|
|
struct PyMethodDef {
|
|
|
|
const char *ml_name; /* The name of the built-in function/method */
|
|
|
|
PyCFunction ml_meth; /* The C function that implements it */
|
|
|
|
int ml_flags; /* Combination of METH_xxx flags, which mostly
|
|
|
|
describe the args expected by the C func */
|
|
|
|
const char *ml_doc; /* The __doc__ attribute, or NULL */
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct PyMethodDef PyMethodDef;
|
|
|
|
|
|
|
|
void __stdcall Py_IncRef(PyObject* object);
|
|
|
|
void __stdcall Py_DecRef(PyObject* object);
|
|
|
|
|
|
|
|
PyObject* __stdcall PyString_FromString(const char *v);
|
|
|
|
char* PyString_AsString(PyObject *string);
|
2017-04-21 07:20:20 +08:00
|
|
|
int PyString_Check(PyObject *o);
|
2016-04-27 01:56:16 +08:00
|
|
|
|
|
|
|
PyObject* PyImport_Import(PyObject *name);
|
|
|
|
PyObject* __stdcall PyImport_ImportModule(const char *name);
|
2016-12-27 05:24:15 +08:00
|
|
|
PyObject* __stdcall PyImport_AddModule(const char *name);
|
2016-04-27 01:56:16 +08:00
|
|
|
|
|
|
|
PyObject* __stdcall PyDict_New();
|
|
|
|
int __stdcall PyDict_SetItemString(PyObject *p, const char *key, PyObject *val);
|
|
|
|
|
|
|
|
PyObject* __stdcall PyTuple_New(size_t len);
|
|
|
|
PyObject* __stdcall PyTuple_GetItem(PyObject *p, size_t pos);
|
|
|
|
int __stdcall PyTuple_SetItem(PyObject *p, size_t pos, PyObject *obj);
|
|
|
|
PyObject* __stdcall PyDict_GetItemString(PyObject *p, const char *key);
|
2016-12-27 05:24:15 +08:00
|
|
|
void __stdcall PyDict_Clear(PyObject *p);
|
2016-04-27 01:56:16 +08:00
|
|
|
size_t __stdcall PyTuple_Size(PyObject *p);
|
|
|
|
|
|
|
|
size_t PyList_Size(PyObject* list);
|
|
|
|
PyObject* PyList_GetItem(PyObject *list, size_t index);
|
|
|
|
|
|
|
|
PyObject* __stdcall PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *);
|
|
|
|
PyObject* __stdcall PyClass_New(PyObject* className, PyObject* classBases, PyObject* classDict);
|
|
|
|
PyObject* __stdcall PyMethod_New(PyObject *func, PyObject *self, PyObject *classobj);
|
|
|
|
PyObject* __stdcall PyInstance_New(PyObject *classobj, PyObject *arg, PyObject *kw);
|
|
|
|
|
|
|
|
PyThreadState* __stdcall PyEval_SaveThread();
|
|
|
|
void __stdcall PyEval_RestoreThread(PyThreadState *tstate);
|
|
|
|
|
|
|
|
int __stdcall PySys_SetObject(char *name, PyObject *v);
|
|
|
|
PyObject* __stdcall PySys_GetObject(char *name);
|
|
|
|
void __stdcall PySys_SetArgv(int argc, char **argv);
|
|
|
|
void __stdcall PySys_SetArgv_Py3(int argc, wchar_t **argv);
|
|
|
|
|
|
|
|
int __stdcall PyRun_SimpleString(const char* str);
|
|
|
|
PyObject* __stdcall PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
|
|
|
|
PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals);
|
|
|
|
|
|
|
|
typedef void(*PyCapsule_Destructor)(PyObject *);
|
|
|
|
PyObject* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor);
|
|
|
|
void* PyCapsule_GetPointer(PyObject *capsule, const char *name);
|
|
|
|
|
|
|
|
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
|
|
|
|
PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
|
|
|
|
PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args);
|
|
|
|
PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw);
|
2017-04-21 07:20:20 +08:00
|
|
|
|
2016-04-27 01:56:16 +08:00
|
|
|
PyObject* PyUnicode_FromWideChar(const wchar_t *w, size_t size);
|
2017-04-21 07:20:20 +08:00
|
|
|
int PyUnicode_Check(PyObject *o);
|
2016-04-27 01:56:16 +08:00
|
|
|
|
|
|
|
PyObject* PyBool_FromLong(long v);
|
|
|
|
|
|
|
|
PyObject* Py_None();
|
|
|
|
PyObject* PyExc_SystemExit();
|
2017-04-21 07:20:20 +08:00
|
|
|
PyObject* PyExc_TypeError();
|
2016-04-27 01:56:16 +08:00
|
|
|
PyObject* PyType_Type();
|
2016-04-28 06:18:55 +08:00
|
|
|
PyObject* PyProperty_Type();
|
2016-04-27 01:56:16 +08:00
|
|
|
|
|
|
|
void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback);
|
|
|
|
void PyErr_NormalizeException(PyObject**exc, PyObject**val, PyObject**tb);
|
|
|
|
void PyErr_SetString(PyObject *type, const char *message);
|
2016-06-22 04:44:29 +08:00
|
|
|
void PyErr_Clear();
|
2016-04-27 01:56:16 +08:00
|
|
|
|
|
|
|
PyObject* PyFile_FromString(char *filename, char *mode);
|
|
|
|
FILE* PyFile_AsFile(PyObject *pyfile);
|
|
|
|
FILE* _Py_fopen(const char* filename, const char* mode);
|
|
|
|
|
|
|
|
PyObject* __stdcall PyUnicode_FromString(const char* str);
|
|
|
|
PyObject* __stdcall PyInstanceMethod_New(PyObject *func);
|
|
|
|
size_t __stdcall PyUnicode_AsWideChar(PyObject *unicode, wchar_t *w, size_t size);
|
|
|
|
int __stdcall Py_AddPendingCall(int(*func)(void *), void *arg);
|
|
|
|
|
|
|
|
PyGILState_STATE __stdcall PyGILState_Ensure();
|
|
|
|
void __stdcall PyGILState_Release(PyGILState_STATE);
|
|
|
|
|
2016-04-28 06:18:55 +08:00
|
|
|
PyObject* __stdcall PyDescr_NewMethod(PyObject* type, struct PyMethodDef *meth);
|
|
|
|
|
2016-12-27 05:24:15 +08:00
|
|
|
size_t __stdcall PyGC_Collect(void);
|
|
|
|
|
2016-04-27 01:56:16 +08:00
|
|
|
bool IsPy3();
|
|
|
|
|
|
|
|
class PyObjectRef;
|
|
|
|
|
|
|
|
|
|
|
|
class PyObjectBorrowedRef
|
|
|
|
{
|
|
|
|
friend PyObjectRef;
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
PyObjectBorrowedRef(PyObject* obj)
|
|
|
|
{
|
|
|
|
m_obj = obj;
|
|
|
|
if (m_obj)
|
|
|
|
Py_IncRef(m_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
~PyObjectBorrowedRef()
|
|
|
|
{
|
|
|
|
if (m_obj)
|
|
|
|
Py_DecRef(m_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
operator PyObject*()
|
|
|
|
{
|
|
|
|
return m_obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
PyObjectBorrowedRef(const PyObjectRef& obj) = delete;
|
|
|
|
|
|
|
|
PyObject* m_obj;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class PyObjectRef
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
PyObjectRef() : m_obj(0)
|
|
|
|
{}
|
|
|
|
|
|
|
|
PyObjectRef(PyObject* obj)
|
|
|
|
{
|
|
|
|
m_obj = obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
~PyObjectRef()
|
|
|
|
{
|
|
|
|
if (m_obj)
|
|
|
|
Py_DecRef(m_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
operator PyObject*()
|
|
|
|
{
|
|
|
|
return m_obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObjectRef& operator= (const PyObjectRef& ref)
|
|
|
|
{
|
|
|
|
if (m_obj)
|
|
|
|
Py_DecRef(m_obj);
|
|
|
|
|
|
|
|
m_obj = ref.m_obj;
|
|
|
|
if (m_obj)
|
|
|
|
Py_IncRef(m_obj);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObjectRef& operator= (const PyObjectBorrowedRef& ref)
|
|
|
|
{
|
|
|
|
if (m_obj)
|
|
|
|
Py_DecRef(m_obj);
|
|
|
|
|
|
|
|
m_obj = ref.m_obj;
|
|
|
|
if (m_obj)
|
|
|
|
Py_IncRef(m_obj);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObjectRef& operator= (PyObject* obj)
|
|
|
|
{
|
|
|
|
if (m_obj)
|
|
|
|
Py_DecRef(m_obj);
|
|
|
|
|
|
|
|
m_obj = obj;
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
PyObjectRef(const PyObjectRef& obj) = delete;
|
|
|
|
|
|
|
|
PyObject* m_obj;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|