[Dream] A meta-wrapper module to interface any C dynamic library

Discussion in 'Python' started by Francesco Bochicchio, Jul 4, 2003.

  1. Hi all,

    I was wondering if it would be possible to make a module which allows to
    do something like that:

    import c_interface
    math_lib = c_interface.load('math.so', 'math.h' )
    sin_f = math_lib.get_function('sin')
    print "sin(3.14) = %f" % sin_f (3.14)

    The idea would be to make a module that allows to use any C dynamic
    library ( I used an hypothetical math.so only as example ) without
    the need of a specific wrapper module.

    I've given some thought to this idea, but I was blocked by the theoric (?)
    impossibility to correctly call a C function without knowing its prototype
    at compile time.

    Did anybody ever attempted to do something like this?

    Ciao
    -----
    FB
    Francesco Bochicchio, Jul 4, 2003
    #1
    1. Advertising

  2. Re: [Dream] A meta-wrapper module to interface any C dynamiclibrary

    "Francesco Bochicchio" <> writes:

    > Hi all,
    >
    > I was wondering if it would be possible to make a module which allows to
    > do something like that:
    >
    > import c_interface
    > math_lib = c_interface.load('math.so', 'math.h' )
    > sin_f = math_lib.get_function('sin')
    > print "sin(3.14) = %f" % sin_f (3.14)
    >
    > The idea would be to make a module that allows to use any C dynamic
    > library ( I used an hypothetical math.so only as example ) without
    > the need of a specific wrapper module.
    >
    > I've given some thought to this idea, but I was blocked by the theoric (?)
    > impossibility to correctly call a C function without knowing its prototype
    > at compile time.
    >
    > Did anybody ever attempted to do something like this?


    Yes, it already exists (to some degree).

    http://starship.python.net/crew/theller/ctypes/

    Thomas
    Thomas Heller, Jul 4, 2003
    #2
    1. Advertising

  3. Francesco Bochicchio

    Simon Burton Guest

    Simon Burton, Jul 4, 2003
    #3
  4. Use ctypes.

    http://starship.python.net/crew/theller/ctypes/

    To see is to believe. The following is an actual IDLE session on WinXP.
    However, ctypes is cross-platform -- it rusn on Windows, Linux, MacOS X.

    >>> import ctypes
    >>> loader = ctypes.cdll
    >>> dll = loader.msvcrt
    >>> sin = dll.sin
    >>> sin.argtypes = [ctypes.c_double]
    >>> sin.restype = ctypes.c_double
    >>> sin(3.14)

    0.0015926529164868282
    >>>
    Seo Sanghyeon, Jul 4, 2003
    #4
  5. On Fri, 04 Jul 2003 13:33:27 +0200, Thomas Heller wrote:

    >
    > Yes, it already exists (to some degree).
    >
    > http://starship.python.net/crew/theller/ctypes/
    >
    > Thomas


    Thanks for the pointer. Is more or less what I had in mind, and lead me to
    find out about libffi, which is also quite interesting.

    This proves a theory of mine: whatever piece of software you can think of,
    there is always some developer in the world that already did it :)

    Ciao
    -----
    FB
    Francesco Bochicchio, Jul 4, 2003
    #5
  6. Re: [Dream] A meta-wrapper module to interface any C dynamiclibrary

    "Simon Burton" <> writes:

    > On Fri, 04 Jul 2003 10:59:39 +0000, Francesco Bochicchio wrote:
    >
    >
    >> Did anybody ever attempted to do something like this?
    >>
    >> Ciao
    >> -----
    >> FB

    >
    > yeah,
    >
    > http://arrowtheory.com/software/python/index.html
    >
    > it's hard :)
    >

    I have tried cdecl.py to parse windows header files, and it does a
    pretty good job.

    I say this after also having tried PLY
    http://systems.cs.uchicago.edu/ply/ with a partial C grammer, and
    finally gave up because I'm not sure it is possible to parse ANSI C with
    a parser like this (at least its not possible for me).

    I found one problem in cdecl.py (it doesn't parse hex constants
    correctly), and I had to extend it somewhat for MS specific keywords
    like __stdcall or so. I also ran the header files through the MSVC
    preprocessor, and hand-edit them somewhat before throwing them at it.

    I'm not really sure if it's a good idea to automatically create ctypes
    wrappers from windows.h...

    But I finally gave up when I encountered some really strange errors...

    Thomas
    Thomas Heller, Jul 4, 2003
    #6
  7. Re: [Dream] A meta-wrapper module to interface any C dynamiclibrary

    (Will Stuyvesant) writes:

    >> [Seo Sanghyeon]
    >> To see is to believe.
    >> >>> import ctypes
    >> >>> loader = ctypes.cdll
    >> >>> dll = loader.msvcrt
    >> >>> sin = dll.sin
    >> >>> sin.argtypes = [ctypes.c_double]
    >> >>> sin.restype = ctypes.c_double
    >> >>> sin(3.14)

    >> 0.0015926529164868282

    >
    > I love examples like this! And ctypes is very good, I downloaded the
    > .EXE installer and ran it and this example works "out of the box".
    >
    > How do you know what functions are available in "dll"? Any general
    > strategy?


    On windows, you use dependency walker, although it would also be
    possible to write something similar in ctypes ;-)

    http://www.dependencywalker.com/

    On unix like systems, I don't know. Use nm(1) ?

    Thomas
    Thomas Heller, Jul 4, 2003
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Robert Brewer

    Recurring dates module [was: Project dream]

    Robert Brewer, Jan 3, 2004, in forum: Python
    Replies:
    0
    Views:
    294
    Robert Brewer
    Jan 3, 2004
  2. est
    Replies:
    1
    Views:
    590
    Diez B. Roggisch
    Feb 16, 2008
  3. Andrew Tomazos
    Replies:
    0
    Views:
    248
    Andrew Tomazos
    Nov 28, 2011
  4. Andrew Tomazos
    Replies:
    9
    Views:
    1,227
    Daniel Kr├╝gler
    Dec 3, 2011
  5. Morten
    Replies:
    1
    Views:
    124
    Dick Davies
    Nov 23, 2004
Loading...

Share This Page