Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > [Dream] A meta-wrapper module to interface any C dynamic library

Reply
Thread Tools

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

 
 
Francesco Bochicchio
Guest
Posts: n/a
 
      07-04-2003
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

 
Reply With Quote
 
 
 
 
Thomas Heller
Guest
Posts: n/a
 
      07-04-2003
"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
 
Reply With Quote
 
 
 
 
Simon Burton
Guest
Posts: n/a
 
      07-04-2003
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

Simon.

 
Reply With Quote
 
Seo Sanghyeon
Guest
Posts: n/a
 
      07-04-2003
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
>>>

 
Reply With Quote
 
Francesco Bochicchio
Guest
Posts: n/a
 
      07-04-2003
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
 
Reply With Quote
 
Thomas Heller
Guest
Posts: n/a
 
      07-04-2003
"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
 
Reply With Quote
 
Thomas Heller
Guest
Posts: n/a
 
      07-04-2003
(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
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
static library and dynamic library Even C Programming 6 10-20-2007 04:05 PM
501 PIX "deny any any" "allow any any" Any Anybody? Networking Student Cisco 4 11-16-2006 10:40 PM
user interface widget: ordered selection list: do any UI library has this widget? zhangweiwu@realss.com Javascript 0 10-10-2006 01:02 AM
Static library Vs. Dynamic library iceColdFire C++ 3 05-17-2005 06:16 AM
Dynamic Library or Static Library under Linux gouqizi.lvcha@gmail.com C++ 6 05-10-2005 03:16 PM



Advertisments