Hi all, recently I've tried to use dl module functionality to interface with external C function. (It was a quick hack so I didn't want to write wrapper code). To my dismay I learned that call method doesn't allow passing data by reference (since strings are immutable in python) - but passing pointers around and modifying caller's data is used all the time in C, so that makes dl practically useless.
I've hacked the method to allow mutable data, by allocating temporary buffers for all string arguments passed to it, calling the c function, and then constructing new strings from the data in those buffers and returning them in a tuple together with function return code. Combined with pack/unpack from struct module, this allows passing any structure to and from the external C function, so, imho, it's a useful thing to have. To my knowledge, this functionality can't be achieved in pure python programs, and there's no alternative dynamic loader module that can do it. More info with examples: http://ptlo.blogspot.com/2005/08/pyinvoke.html Source: http://software.senko.net/pub/python-dl2.tgz (the tarball contains setup.py and my dlmodule.c version, for experimenting without patching the official module, and patch made against (fairly recent) cvs version of dlmodule.c) Thoughts, comments? Could this be put in standard module, does it make sense, etc? Regards, Senko -- Senko Rasic <senko at senko dot net> _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com