[PyKDE] embedding SIP wrapped library...

Bjorn Pettersen BPettersen at narex.com
Wed May 29 19:00:00 BST 2002


> From: Bjorn Pettersen

I hate to reply to myself...

> I'm trying to embed Python, which is working nicely, however
> I also want to access objects from my SIP wrapped library 
> from Python. I tried the following code:
> 
>   int main() {
>     Py_Initialize();

Here I need to let Python load the module first:

      PyObject* strMod = PyString_FromString("NrxDataTypes");
	PyObject* mod = PyImport_Import(nrx);

and for the PyImport_Import to succeed in debug mode, the .dlls must be
named foo_d.dll and libsip_d.dll, and the SIP generated NrxDataTypes.py
module needs to be in the module search path.

>     initlibsip();
>     initlibNrxDataTypesc();
> 
>     NDate value(2002, 5, 28);
      PyObject* dict = PyDict_New();
      PyObject* tmp = PyString_FromString("tmp");
>     PyObject* val = sipMapCppToSelf(&value, sipClass_NDate);
	PyDict_SetItem(dict, tmp, val);
      PyObject* res = PyRun_String("2 + tmp.getYear()", eval_input,
dict, dict);
      long result = PyInt_AsLong(res);

It still doesn't work however. I get a 

  Fatal Python error: PyEval_SaveThread: NULL tstate

If anyone knows what could cause this, I would appreciate a pointer :-)
In the meantime I'll try to dig into it myself...

-- bjorn




More information about the PyQt mailing list