Hi Python fans,

I am developing a DLL that is loaded by a host application on windows.
 I'm using python 2.5.

My DLL uses an embedded python interpreter which can access the host
application through an API which I have exposed using SWIG 1.3.31.

Therefore I have both extended and embedded Python at once: the SWIG
generated code is statically linked into my DLL, and one of the
functions in my DLL executes PyRun_SimpleFile.

Using python25_d.dll, I stepped through some python code to understand
what is happening, and it appears that PyRun_SimpleFile is returning
-1 because python cannot create the module __main__.

Here's the code from pythonrun.c:

int
PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
                        PyCompilerFlags *flags)
{
        PyObject *m, *d, *v;
        const char *ext;

        m = PyImport_AddModule("__main__");
        if (m == NULL)
                return -1;
.
.
.
}

BTW, PyImport_AddModule fails because deeper down a dictionary check fails:

        if (!PyDict_Check(op))
                return NULL;


Can someone suggest what I need to do to get this to work?

Here are the relevant lines from my code:

        if (GetOpenFileName(&ofn)==TRUE)
        {
                Py_Initialize();
                init_mymodule(); // SWIG generated method

                PyObject* PyFileObject = PyFile_FromString(ofn.lpstrFile, "r");

                if (PyRun_SimpleFile(PyFile_AsFile(PyFileObject), 
ofn.lpstrFile)==-1)
                {
                        MessageBox(NULL, "error running script", "Python", 
MB_ICONERROR);
                }

                Py_DECREF(PyFileObject);

                Py_Finalize();
        }

Thanks.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to