It's not that WINFUNCTYPE is always changing in CPython - it's that each time 
you run it'll have a different ID.  In IronPython we allocate object IDs 
sequentially starting at 43.  So if the only thing you call id() on (which 
printing the repr does implicitly) then the 1st object will always have an id 
of 43.  If you did "id(100)" first and then looked at ctypes.WINFUNCTYPE then 
you'd see it'd be 0x2C.

Can you include the line of code where the call is happening and an setup to 
get into the call?  It does look like there's a 3rd argument that's optional 
because:

from ctypes import *
WINFUNCTYPE(c_int, c_int, c_int)(100, 'foo', '100')

Starts reporting a different error message on CPython than IronPython.  My 
guess is we need to implement this but there don't seem to be any tests for it 
so if we can see at least 1 call site that'd be helpful :)  can you open a bug 
on CodePlex for this as well?

From: users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.com] On Behalf Of Clemens Nylandsted 
Klokmose
Sent: Sunday, September 12, 2010 7:48 AM
To: users@lists.ironpython.com
Subject: [IronPython] PyBonjour through Ctypes

Hi,
I am experimenting with getting a Python library running in IronPython that 
relies on PyBonjour (http://code.google.com/p/pybonjour/).
PyBonjour is a pure python library interfacing with the systems bonjour 
installation. I am completely unexperienced with CTypes, so what I am proposing 
now might seem naïve.

At the top of the pybonjour.py is code looking like this:
if sys.platform == 'win32':
    # Need to use the stdcall variants
    _libdnssd = ctypes.windll.dnssd
    _CFunc = ctypes.WINFUNCTYPE

IronPython's sys.platform evaluates to 'cli', so I have tried to change the 
check to if sys.platform == 'win32' or sys.platform == 'cli':
This seems to work, but everytime a C function is called now, Python complains 
that theres an argument too much.
E.g. TypeError: CFunctionType() takes at most 2 arguments (3 given). My 
suggestion is that ctypes.WINFUNCTYPE in IronPython might be a wrong value? (In 
IronPython it seems to always be 0x000000000000002B, whereas in CPython the 
value varies)

Does anyone have an idea of how to go about this?

It should be noted that I have pybonjour running with the standard CPython on 
Windows.

Thanks,
Clemens
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to