On Mon, Apr 7, 2008 at 9:54 AM, Michael Foord <[EMAIL PROTECTED]> wrote: > > I've been trying to use ctypes.py from FePy for dynamic platform invoke. > Unfortunately it doesn't appear to work...
The main problem appears to be that MethodTarget.CanOptimize in IronPython 1.1.1 assumes that the method will have a DeclaringType -- but a dynamically generated method isn't necessarily attached to a type. As such, it doesn't appear that this version of ctypes.py could have ever worked with IronPython 1.1.1. I haven't checked earlier versions of IronPython 1. By changing MethodTarget.CanOptimize in the IronPython source so that it returns false when mi.DeclaringType == null, I was able to make ctypes.py work. > Unfortunately 'WDLL' doesn't exist in ctypes. If I replace it with > 'CDLL' it blows up with the following error: Presumably, the difference between WDLL and CDLL was that the latter uses a calling convention of CallingConvention.Cdecl while the former would have used CallingConvention.Winapi. This is a pretty important difference! In general, I think that there's some really nice code in ctypes.py, but like all invocations of pInvoke, you definitely can't use it blindly. Your PostMessage would probably break on a 64-bit OS even if it weren't for the issues of the calling convention and the problem in MethodTarget.CanOptimize -- because in the proper definition of PostMessage, the second and third parameters are IntPtr, but ctypes.py would treat them as "int32" -- Curt Hagenlocher [EMAIL PROTECTED] _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
