Dear list,

My SWIG generated module (myModule) needs an array-like object (carray) to work. Carray objects are created both internally (in C++ level) and through Python so I have to load it when myModule initializes.

carray is modified from arraymodule.c and is quite simple:

static PyMethodDef a_methods[] =
{
  {"carray", a_array, METH_VARARGS, a_array_doc},
  {                                               /* sentinel */
    NULL,    NULL
  }
};

Currently, I load a_methods directly using code (error checking ignored)

  PyObject* mm = PyImport_AddModule("__main__");
  PyObject* dict = PyModule_GetDict(mm);
  PyObject*  v = PyCFunction_New(a_methods, NULL);
  PyDict_SetItemString(dict, a_methods->ml_name, v);

There are several problems with this approach:

1. use of __main__? carray can not be accessed directly within other libraries. ('from myModule import *' DOES NOT import carray!) I tried to use __builtins__ but it does not work for some reason out of my understanding of Python. I am not sure how to add carray to myModule dictionary.

2. No type object? I am not sure what is the purpose of ArrayType but the usual init_module should be
m = Py_InitModule3("carray", a_methods, module_doc);
d = PyModule_GetDict(m);
PyDict_SetItemString(dict, "ArrayType", (PyObject *)&Arraytype);


When I add ArrayType to __main__ , access to ArrayType leads to a quick core dump.

I do not feel comfortable with my current approach. Could anyone tell me some better (more standard) way?

Many thanks in advance.
Bo
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to