Extending an embeded Python

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 :)
 
F

Fredrik Lundh

Mikin said:
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!

compare and contrast:

C:\Python24>python
Python 2.4 (#60, Nov 30 2004, 11:49:19) Traceback (most recent call last):
Traceback (most recent call last):
'win32'

</F>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,990
Messages
2,570,211
Members
46,796
Latest member
SteveBreed

Latest Threads

Top