mirror of https://github.com/tp4a/teleport
288 lines
10 KiB
C++
288 lines
10 KiB
C++
#ifndef __PYS_H__
|
||
#define __PYS_H__
|
||
|
||
#include <ex.h>
|
||
|
||
//=========================================================================
|
||
// Type define
|
||
//=========================================================================
|
||
#if defined(EX_OS_WIN32)
|
||
# define DYLIB_HANDLE HINSTANCE
|
||
#else
|
||
# define DYLIB_HANDLE void*
|
||
#endif
|
||
|
||
//=========================================================================
|
||
// Python API
|
||
//=========================================================================
|
||
#define MS_NO_COREDLL 1
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#if defined(EX_OS_WIN32)
|
||
# define PYS_USE_PYLIB_SHARED
|
||
# include <Python.h>
|
||
#elif defined(EX_OS_LINUX)
|
||
# define PYS_USE_PYLIB_STATIC
|
||
# include <Python.h>
|
||
#else
|
||
# error This platform not supported yet.
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#ifdef PYS_USE_PYLIB_SHARED
|
||
//========================================================
|
||
// WIN32
|
||
//========================================================
|
||
#define EXTDECLPROC(result, name, args) \
|
||
typedef result (__cdecl* __PROC__ ## name) args; \
|
||
extern __PROC__ ## name pylib_ ## name;
|
||
|
||
#define EXTDECLVAR(vartyp, name) \
|
||
typedef vartyp __VAR__ ## name; \
|
||
extern __VAR__ ## name* pylib_ ## name;
|
||
|
||
|
||
EXTDECLVAR(int, Py_FrozenFlag);
|
||
EXTDECLVAR(int, Py_NoSiteFlag);
|
||
EXTDECLVAR(int, Py_OptimizeFlag);
|
||
EXTDECLVAR(const char*, Py_FileSystemDefaultEncoding);
|
||
EXTDECLVAR(int, Py_VerboseFlag);
|
||
EXTDECLVAR(int, Py_IgnoreEnvironmentFlag);
|
||
EXTDECLVAR(int, Py_DontWriteBytecodeFlag);
|
||
EXTDECLVAR(int, Py_NoUserSiteDirectory);
|
||
|
||
EXTDECLPROC(void, Py_Initialize, (void));
|
||
EXTDECLPROC(void, Py_Finalize, (void));
|
||
EXTDECLPROC(void, Py_IncRef, (PyObject *));
|
||
EXTDECLPROC(void, Py_DecRef, (PyObject *));
|
||
EXTDECLPROC(void, Py_SetProgramName, (wchar_t *));
|
||
EXTDECLPROC(void, Py_SetPythonHome, (wchar_t *));
|
||
EXTDECLPROC(void, Py_SetPath, (wchar_t *)); /* new in Python 3 */
|
||
EXTDECLPROC(int, PySys_SetArgvEx, (int, wchar_t **, int));
|
||
EXTDECLPROC(PyObject *, PyImport_ImportModule, (const char *));
|
||
EXTDECLPROC(PyObject *, PyObject_GetAttrString, (PyObject *, const char *));
|
||
|
||
// in python3.0~3.4, it is _Py_char2wchar, but renamed to Py_DecodeLocale in python3.5. WTF.
|
||
//EXTDECLPROC(wchar_t *, _Py_char2wchar, (char *, size_t *));
|
||
|
||
//EXTDECLPROC(PyObject*, PyUnicode_FromWideChar, (const wchar_t*, size_t size ));
|
||
|
||
EXTDECLPROC(PyObject *, Py_BuildValue, (char *, ...));
|
||
|
||
EXTDECLPROC(void, PyErr_Clear, (void));
|
||
EXTDECLPROC(PyObject *, PyErr_Occurred, (void));
|
||
EXTDECLPROC(void, PyErr_Print, (void));
|
||
|
||
EXTDECLPROC(PyObject *, PyObject_Call, (PyObject *callable_object, PyObject *args, PyObject *kw));
|
||
EXTDECLPROC(int, PyArg_Parse, (PyObject *, const char *, ...));
|
||
|
||
EXTDECLPROC(PyObject *, PyObject_CallFunction, (PyObject *, char *, ...));
|
||
EXTDECLPROC(PyObject *, PyModule_GetDict, (PyObject *));
|
||
EXTDECLPROC(PyObject *, PyDict_GetItemString, (PyObject *, char *));
|
||
EXTDECLPROC(int, PyDict_SetItemString, (PyObject *dp, const char *key, PyObject *item));
|
||
EXTDECLPROC(long, PyLong_AsLong, (PyObject *));
|
||
EXTDECLPROC(PyObject *, PyLong_FromLong, (long));
|
||
EXTDECLPROC(PyObject *, PyLong_FromUnsignedLong, (unsigned long));
|
||
EXTDECLPROC(PyObject *, PyLong_FromUnsignedLongLong, (unsigned PY_LONG_LONG));
|
||
EXTDECLPROC(PyObject *, PyBytes_FromString, (const char *));
|
||
EXTDECLPROC(PyObject *, PyBytes_FromStringAndSize, (const char *, Py_ssize_t));
|
||
EXTDECLPROC(PyObject *, PyUnicode_FromString, (const char *));
|
||
EXTDECLPROC(PyObject *, PyBool_FromLong, (long));
|
||
|
||
|
||
EXTDECLPROC(int, PyImport_ExtendInittab, (struct _inittab *newtab));
|
||
EXTDECLPROC(PyObject *, PyModule_Create2, (struct PyModuleDef*, int apiver));
|
||
EXTDECLPROC(int, PyArg_ParseTuple, (PyObject *, const char *, ...));
|
||
EXTDECLPROC(PyObject *, PyTuple_Pack, (Py_ssize_t, ...));
|
||
|
||
|
||
#else // for linux, link to static python lib.
|
||
|
||
#define pylib_Py_FrozenFlag Py_FrozenFlag
|
||
#define pylib_Py_NoSiteFlag Py_NoSiteFlag
|
||
#define pylib_Py_OptimizeFlag Py_OptimizeFlag
|
||
#define pylib_Py_FileSystemDefaultEncoding Py_FileSystemDefaultEncoding
|
||
#define pylib_Py_VerboseFlag Py_VerboseFlag
|
||
#define pylib_Py_IgnoreEnvironmentFlag Py_IgnoreEnvironmentFlag
|
||
#define pylib_Py_DontWriteBytecodeFlag Py_DontWriteBytecodeFlag
|
||
#define pylib_Py_NoUserSiteDirectory Py_NoUserSiteDirectory
|
||
#define pylib_Py_Initialize Py_Initialize
|
||
#define pylib_Py_Finalize Py_Finalize
|
||
#define pylib_Py_IncRef Py_IncRef
|
||
#define pylib_Py_DecRef Py_DecRef
|
||
#define pylib_Py_SetProgramName Py_SetProgramName
|
||
#define pylib_Py_SetPythonHome Py_SetPythonHome
|
||
#define pylib_Py_SetPath Py_SetPath
|
||
#define pylib_PySys_SetArgvEx PySys_SetArgvEx
|
||
#define pylib_PyImport_ImportModule PyImport_ImportModule
|
||
#define pylib_PyObject_GetAttrString PyObject_GetAttrString
|
||
#define pylib_Py_BuildValue Py_BuildValue
|
||
#define pylib_PyErr_Clear PyErr_Clear
|
||
#define pylib_PyErr_Occurred PyErr_Occurred
|
||
#define pylib_PyErr_Print PyErr_Print
|
||
#define pylib_PyObject_Call PyObject_Call
|
||
#define pylib_PyArg_Parse PyArg_Parse
|
||
#define pylib_PyObject_CallFunction PyObject_CallFunction
|
||
#define pylib_PyModule_GetDict PyModule_GetDict
|
||
#define pylib_PyDict_GetItemString PyDict_GetItemString
|
||
#define pylib_PyDict_SetItemString PyDict_SetItemString
|
||
#define pylib_PyLong_AsLong PyLong_AsLong
|
||
#define pylib_PyLong_FromLong PyLong_FromLong
|
||
#define pylib_PyLong_FromUnsignedLong PyLong_FromUnsignedLong
|
||
#define pylib_PyLong_FromUnsignedLongLong PyLong_FromUnsignedLongLong
|
||
#define pylib_PyBytes_FromString PyBytes_FromString
|
||
#define pylib_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
|
||
#define pylib_PyUnicode_FromString PyUnicode_FromString
|
||
#define pylib_PyBool_FromLong PyBool_FromLong
|
||
#define pylib_PyImport_ExtendInittab PyImport_ExtendInittab
|
||
#define pylib_PyModule_Create2 PyModule_Create2
|
||
#define pylib_PyArg_ParseTuple PyArg_ParseTuple
|
||
#define pylib_PyTuple_Pack PyTuple_Pack
|
||
|
||
#define pylib_Py_IncRef Py_IncRef
|
||
#define pylib_Py_DecRef Py_DecRef
|
||
#define pylib_PyBool_FromLong PyBool_FromLong
|
||
#define pylib_PyBool_FromLong PyBool_FromLong
|
||
|
||
#endif
|
||
|
||
#define PYLIB_XINCREF(o) pylib_Py_IncRef(o)
|
||
#define PYLIB_XDECREF(o) pylib_Py_DecRef(o)
|
||
#define PYLIB_DECREF(o) PYLIB_XDECREF(o)
|
||
#define PYLIB_INCREF(o) PYLIB_XINCREF(o)
|
||
|
||
#define PYLIB_RETURN_TRUE return pylib_PyBool_FromLong(1)
|
||
#define PYLIB_RETURN_FALSE return pylib_PyBool_FromLong(0)
|
||
|
||
|
||
typedef int PYS_BOOL;
|
||
#define PYS_TRUE 1
|
||
#define PYS_FALSE 0
|
||
|
||
|
||
//=========================================================================
|
||
// PyShell API
|
||
//=========================================================================
|
||
typedef unsigned long PYS_RET;
|
||
#define PYSR_OK 0x00000000
|
||
#define PYSR_FAILED 0x00000005
|
||
|
||
#if 0
|
||
#ifdef EX_OS_WIN32
|
||
# ifdef EX_DEBUG
|
||
# if defined(_M_X64)
|
||
# pragma comment(lib, "pys_64d.lib")
|
||
# elif defined(_M_IX86)
|
||
# pragma comment(lib, "pys_32d.lib")
|
||
# else
|
||
# error unsupport platform.
|
||
# endif
|
||
# else
|
||
# if defined(_M_X64)
|
||
# pragma comment(lib, "pys_64.lib")
|
||
# elif defined(_M_IX86)
|
||
# pragma comment(lib, "pys_32.lib")
|
||
# else
|
||
# error unsupport platform.
|
||
# endif
|
||
# endif
|
||
#endif
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
typedef void* PYS_HANDLE;
|
||
|
||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>PyShell<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>˾<EFBFBD><CBBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
PYS_HANDLE pys_create(void);
|
||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>PyShell<6C><6C><EFBFBD><EFBFBD>
|
||
void pys_destroy(PYS_HANDLE* pysh);
|
||
|
||
// ʹ<><CAB9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ·<CAB1><C2B7><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ·<CAB1><C2B7><EFBFBD>а<EFBFBD><D0B0><EFBFBD>pythonXX.dll/python.zip/modules<65>ȵȣ<C8B5>
|
||
PYS_BOOL pys_init_runtime(PYS_HANDLE pysh, const wchar_t* exec_file, const wchar_t* runtime_path);
|
||
|
||
// <20><><EFBFBD><EFBFBD>python<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6>ε<EFBFBD><CEB5>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ʡ<EFBFBD>ԣ<EFBFBD>
|
||
PYS_BOOL pys_add_search_path(PYS_HANDLE pysh, const wchar_t* path);
|
||
|
||
// <20><><EFBFBD><EFBFBD>python<6F><6E><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ԣ<EFBFBD>
|
||
void pys_set_argv(PYS_HANDLE pysh, int argc, wchar_t** argv);
|
||
// <><D7B7>python<6F><6E><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ԣ<EFBFBD>
|
||
void pys_add_arg(PYS_HANDLE pysh, const wchar_t* arg);
|
||
// <20><><EFBFBD><EFBFBD>python<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>ʡ<EFBFBD>ԣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ǰ<EFBFBD><C7B0>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
||
void pys_set_program(PYS_HANDLE pysh, const wchar_t* program_name);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽű<DABD><C5B1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>.py<70>ļ<EFBFBD><C4BC><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>.zip<69>ļ<EFBFBD>
|
||
void pys_set_startup_file(PYS_HANDLE pysh, const wchar_t* filename);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>func_nameΪNULLʱĬ<CAB1><C4AC>ִ<EFBFBD><D6B4>ָ<EFBFBD><D6B8>ģ<EFBFBD><C4A3><EFBFBD>е<EFBFBD>main<69><6E><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ԣ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD>startup_file<6C><65>һ<EFBFBD><D2BB>.py<70>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>module_name<6D><65><EFBFBD><EFBFBD>.py<70>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD>startup_file<6C><65>һ<EFBFBD><D2BB>.zip<69>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>module_name<6D><65>`pysmain`<60><>
|
||
void pys_set_bootstrap_module(PYS_HANDLE pysh, const char* module_name, const char* func_name);
|
||
|
||
// <20><>ʼ<EFBFBD><CABC>ģ<EFBFBD><C4A3><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>ԭ<EFBFBD><D4AD>
|
||
typedef PyObject* (*pys_init_module_func)(void);
|
||
|
||
typedef struct PYS_BUILTIN_FUNC
|
||
{
|
||
const char* py_func_name; // Python<6F>е<EFBFBD><D0B5><EFBFBD>ʱʹ<CAB1>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD>
|
||
PyCFunction c_func_addr; // <20><>Ӧ<EFBFBD><D3A6>C<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
||
PYS_BOOL have_args; // <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||
const char* py_func_desc; // <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ע<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ΪNULL<4C><4C>
|
||
}PYS_BUILTIN_FUNC;
|
||
|
||
typedef enum PYS_CONST_TYPE
|
||
{
|
||
PYS_CONST_BOOL, // Python<6F>еõ<D0B5> True/False <20><>ֵ
|
||
PYS_CONST_LONG, // Python<6F>еõ<D0B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
PYS_CONST_STRING, // Python<6F>еõ<D0B5>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||
PYS_CONST_BYTES // Python<6F>еõ<D0B5>һ<EFBFBD><D2BB>Bytes<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}PYS_CONST_TYPE;
|
||
|
||
typedef struct PYS_BUILTIN_CONST
|
||
{
|
||
char* py_const_name; // Python<6F>е<EFBFBD><D0B5><EFBFBD>ʱʹ<CAB1>õı<C3B5><C4B1><EFBFBD><EFBFBD><EFBFBD>
|
||
PYS_CONST_TYPE type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
size_t size; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
|
||
void* buffer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
||
}PYS_BUILTIN_CONST;
|
||
|
||
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڽ<EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>Ӧ<EFBFBD><D3A6>funcs/consts<74><73><EFBFBD><EFBFBD>ΪNULL<4C><4C>
|
||
// <20>ɶ<EFBFBD><C9B6>ε<EFBFBD><CEB5>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD>ģ<EFBFBD>顣<EFBFBD><E9A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>ʱʹ<CAB1><CAB9><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
|
||
// ͬһ<CDAC><D2BB>ģ<EFBFBD><C4A3><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>Сд<D0A1><D0B4><EFBFBD>֣<EFBFBD>
|
||
PYS_BOOL pys_add_builtin_module(PYS_HANDLE pysh, const char* module_name, pys_init_module_func init_func);
|
||
|
||
PyObject* pys_create_module(const char* module_name, PYS_BUILTIN_FUNC* funcs);
|
||
void pys_builtin_const_bool(PyObject* mod, const char* name, PYS_BOOL val);
|
||
void pys_builtin_const_long(PyObject* mod, const char* name, long val);
|
||
void pys_builtin_const_utf8(PyObject* mod, const char* name, const char* val); // val <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>utf8<66><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||
void pys_builtin_const_wcs(PyObject* mod, const char* name, const wchar_t* val);
|
||
void pys_builtin_const_bin(PyObject* mod, const char* name, const ex_u8* val, size_t size);
|
||
|
||
// <20><><EFBFBD><EFBFBD>python<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int pys_run(PYS_HANDLE pysh);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
class PysHandleHolder
|
||
{
|
||
public:
|
||
PysHandleHolder(PYS_HANDLE h) :m_handle(h) { }
|
||
~PysHandleHolder() { pys_destroy(&m_handle); }
|
||
private:
|
||
PYS_HANDLE m_handle;
|
||
};
|
||
#endif
|
||
|
||
#endif // __PYS_H__
|