Python c_types .dll functions (pari library)

Posted by silinter on Stack Overflow See other posts from Stack Overflow or by silinter
Published on 2010-03-27T00:44:14Z Indexed on 2010/03/27 0:53 UTC
Read the original article Hit count: 366

Filed under:
|
|

Alright, so a couple days ago I decided to try and write a primitive wrapper for the PARI library. Ever since then I've been playing with ctypes library in loading the dll and accessing the functions contained using code similar to the following:

from ctypes import *
libcyg=CDLL("<path/cygwin1.dll") #It needs cygwin to be loaded. Not sure why.
pari=CDLL("<path>/libpari-gmp-2.4.dll")

print pari.fibo #fibonacci function
#prints something like "<_FuncPtr object at 0x00BA5828>"

So the functions are there and they can potentially be accessed, but I always recieve an access violation no matter what I try. For example:

pari.fibo(5) #access violation
pari.fibo(c_int(5)) #access violation

pari.fibo.argtypes=[c_long] #setting arguments manually
pari.fibo.restype=long #set the return type

pari.fibo(byref(c_int(5))) #access violation reading 0x04 consistently

and any variation on that, including setting argtypes to receive pointers.
The Pari .dll is written in C and the fibonacci function's syntax within the library is GEN fibo(long x) (docs @http://pari.math.u-bordeaux.fr/dochtml/html/Arithmetic_functions.html#fibonacci, I need more rep it seems).
Could it be the return type that's causing these errors, as it is not a standard int or long but a GEN type, which is unique to the PARI library? Any help would be appreciated. If anyone is able to successfully load the library and use ANY function from within python, please tell; I've been at this for hours now.

© Stack Overflow or respective owner

Related posts about python

Related posts about ctypes