New submission from Matt Clarke:

I have had an issue arise with ctypes callbacks with 64bit Python on Windows.
Note: everything works fine with 32bit Python on Windows and on 32bit and 64bit 
Linux.

I have created a simple example to illustrate the issue I have (see 
attachment), but the real-life issue occurs with using Python to interact with 
the EPICS control software (http://www.aps.anl.gov/epics/) used at many major 
scientific institutes.

Basically, if I have a C callback that takes a struct (by value) greater than 8 
bytes then the callback returns nonsense. 8 bytes or less works fine.

Stepping through with the Windows debugger, if appears that something goes 
amiss between the callback being called in C and the closure_fcn(ffi_cif *cif, 
void *resp, void **args, void *userdata) function in ctypes's callback.c file. 
Unfortunately, the debugger won't let me step in between those two points.

Looking at the memory I can see the original data in memory at some memory 
address, X, and a copy of the data at X+40 bytes, but the args in the 
closure_fcn points at X-40 bytes (which is junk).

Using 32bit Python the data copy is at X-40 bytes and the args pointer in the 
closure_fcn also points at this.

EPICS has some 64bit C/C++ clients that work fine using callbacks on Windows. 
Likewise, doing the same sort of thing as ctypes does with EPICS from C# using 
PInvoke works fine.
 
Any help would be much appreciated.

----------
components: ctypes
files: code.txt
messages: 183156
nosy: Matt.Clarke
priority: normal
severity: normal
status: open
title: Ctypes callbacks shows problem on Windows Python (64bit)
type: behavior
versions: Python 2.7
Added file: http://bugs.python.org/file29265/code.txt

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17310>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to