Ok, tried both of those methods, and they pass cython compilation, but
then I get this error from gcc:

brucewa...@broo:~/Desktop$ gcc -shared -pthread -fPIC -fwrapv -O2
-Wall -fno-strict-aliasing -I/usr/include/python2.6 -o cytypestest.so
cytypestest.c
cytypestest.c: In function ‘initcytypestest’:
cytypestest.c:707: error: subscripted value is pointer to function

Cheers!

Chris


On Thu, Oct 8, 2009 at 2:35 PM, Dag Sverre Seljebotn
<[email protected]> wrote:
> Dag Sverre Seljebotn wrote:
>> Chris Colbert wrote:
>>> Given our previous conversation, it will probably be easier to use
>>> ctypes to get the function handles for dynamically loaded libraries
>>> and *somehow* get that function pointer into Cython.
>>>
>>> My attempt is like so (for a simple example) but Cython is complaining
>>> during compilation:
>>>
>>>
>>> from ctypes import *
>>>
>>> cdef extern from "Python.h":
>>>     void* PyLong_AsVoidPtr(object)
>>>
>>> cdef int a
>>>
>>> libc = CDLL('libc.so.6')
>>> timefunc = libc.time
>>>
>>> cdef object tptr = ctypes.addressof(timefunc)
>>> cdef int (*mytime)()
>>> mytime = PyLong_AsVoidPtr(tptr)
>>>
>> I think this should do it:
>>
>> ctypedef int (*timefuncptr)()
>> cdef timefuncptr mytime
>> mytime = <timefuncptr>ctypes.addressof(libc.time)
> Sorry, that should be
>
> mytime = <timefuncptr><size_t>ctypes.addressof(libc.time)
>
> i.e. convert to typed integer of pointer size before converting to
> pointer. The same goes for the example below.
>>
>> That is, unless ctypes.addressof returns the address of the *pointer*
>> to the function stored in libc.time (I'm not familiar enough with
>> ctypes). In that case it is instead:
>>
>> mytime = (<timefuncptr*>ctypes.addressof(libc.time))[0]
>>
>> Dag Sverre
>>
>
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to