Реализация offsetof () для структур в Python ctypes

Кажется, я не могу реализовать offsetof для структуры в ctypes. Я видел FAQ для ctypes , но либо не работает, либо Я не могу разобраться в деталях.

Python 2.6.4 (r264:75706, Dec 19 2010, 13:04:47) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> class Dog(Structure):
...   _fields_ = [('name', c_char_p), ('weight', c_int)]
...   def offsetof(self, field):
...     return addressof(field) - addressof(self)
... 
>>> d = Dog('max', 80)
>>> d.offsetof(d.weight)
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 4, in offsetof
TypeError: invalid type
>>> d.offsetof(weight)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'weight' is not defined
>>> d.offsetof('weight')
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 4, in offsetof
TypeError: invalid type

Кажется, addressof () не работает с элементами структуры (например, d.weight ). я пытался другие вещи, связанные с pointer () и byref () , но не повезло.

Конечно, я хочу, чтобы это работало на всех архитектурах, независимо от размера указателя, и независимо от эффектов заполнения, поэтому, пожалуйста, не говорите просто суммировать sizeof () для всех предыдущих элементов, если вы не можете убедиться, что используете какие-либо дополнения к C компилятор добавляет во внимание.

Есть идеи? Спасибо!

5
задан samf 18 January 2011 в 00:22
поделиться