M
Mikin von Flap
I'm trying to embed Python in a Windows exe, and extend it with some
functions in the same program. So far I only add one function:
<file.h>
static PyObject* py_print( PyObject* self, PyObject* args ) {
const char* msg;
if( !PyArg_ParseTuple( args, "s", &msg ) )
return 0;
EventLog::log( msg );
Py_INCREF( Py_None );
return Py_None;
}
static PyMethodDef StoneAgeMethods[] = {
{ "log", py_print, METH_VARARGS, "Print a message to the log" },
{ 0, 0, 0, 0 } /* sentinel */
};
<file.cpp>
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int ) {
EventLog::init( "con_dump.txt" );
Py_Initialize();
EventLog::log( "Python version '%s'", Py_GetVersion() );
PyObject* res0 = Py_InitModule( "stoneage", StoneAgeMethods );
res1 = PyRun_SimpleString( "stoneage.log( \"test\" )\n" ); // FAIL
res2 = PyRun_SimpleString( "log( \"test\" )\n" ); // FAIL
res3 = PyRun_SimpleString( "print \"test\"\n" ); // OK
Py_Finalize();
}
This compiles without problems, but when I run it I can't use the "log"
function. Result res0 is a non-null object.
As far as I can understand the "Extending and Embedding the Python
Interpreter" doc, res1 should work but it doesn't!
I'm a total newbie to Python, so any help appreciated
functions in the same program. So far I only add one function:
<file.h>
static PyObject* py_print( PyObject* self, PyObject* args ) {
const char* msg;
if( !PyArg_ParseTuple( args, "s", &msg ) )
return 0;
EventLog::log( msg );
Py_INCREF( Py_None );
return Py_None;
}
static PyMethodDef StoneAgeMethods[] = {
{ "log", py_print, METH_VARARGS, "Print a message to the log" },
{ 0, 0, 0, 0 } /* sentinel */
};
<file.cpp>
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int ) {
EventLog::init( "con_dump.txt" );
Py_Initialize();
EventLog::log( "Python version '%s'", Py_GetVersion() );
PyObject* res0 = Py_InitModule( "stoneage", StoneAgeMethods );
res1 = PyRun_SimpleString( "stoneage.log( \"test\" )\n" ); // FAIL
res2 = PyRun_SimpleString( "log( \"test\" )\n" ); // FAIL
res3 = PyRun_SimpleString( "print \"test\"\n" ); // OK
Py_Finalize();
}
This compiles without problems, but when I run it I can't use the "log"
function. Result res0 is a non-null object.
As far as I can understand the "Extending and Embedding the Python
Interpreter" doc, res1 should work but it doesn't!
I'm a total newbie to Python, so any help appreciated