Index: demo.c =================================================================== --- demo.c (revision 66960) +++ demo.c (working copy) @@ -2,34 +2,38 @@ #include "Python.h" -void initxyzzy(void); /* Forward */ +PyObject* PyInit_xyzzy(void); /* Forward */ main(int argc, char **argv) { + /* Ignore passed-in argc/argv. If desired, conversion + should use mbstowcs to convert them. */ + wchar_t *args[] = {L"embed", L"hello", 0}; + /* Pass argv[0] to the Python interpreter */ - Py_SetProgramName(argv[0]); + Py_SetProgramName(args[0]); + /* Add a static module */ + PyImport_AppendInittab("xyzzy", PyInit_xyzzy); + /* Initialize the Python interpreter. Required. */ Py_Initialize(); - /* Add a static module */ - initxyzzy(); - /* Define sys.argv. It is up to the application if you want this; you can also let it undefined (since the Python code is generally not a main program it has no business touching sys.argv...) */ - PySys_SetArgv(argc, argv); + PySys_SetArgv(2, args); /* Do some application specific code */ printf("Hello, brave new world\n\n"); /* Execute some Python statements (in module __main__) */ PyRun_SimpleString("import sys\n"); - PyRun_SimpleString("print sys.builtin_module_names\n"); - PyRun_SimpleString("print sys.modules.keys()\n"); - PyRun_SimpleString("print sys.executable\n"); - PyRun_SimpleString("print sys.argv\n"); + PyRun_SimpleString("print(sys.builtin_module_names)\n"); + PyRun_SimpleString("print(sys.modules.keys())\n"); + PyRun_SimpleString("print(sys.executable)\n"); + PyRun_SimpleString("print(sys.argv)\n"); /* Note that you can call any public function of the Python interpreter here, e.g. call_object(). */ @@ -57,9 +61,20 @@ {NULL, NULL} /* sentinel */ }; -void -initxyzzy(void) +static struct PyModuleDef xyzzymodule = { + {}, /* m_base */ + "xyzzy", /* m_name */ + 0, /* m_doc */ + 0, /* m_size */ + xyzzy_methods, /* m_methods */ + 0, /* m_reload */ + 0, /* m_traverse */ + 0, /* m_clear */ + 0, /* m_free */ +}; + +PyObject* +PyInit_xyzzy(void) { - PyImport_AddModule("xyzzy"); - Py_InitModule("xyzzy", xyzzy_methods); + return PyModule_Create(&xyzzymodule); }