Я создаю структуру ctype. У меня есть внешняя функция, которая требует указания указателя на эту структуру. Предполагается, что структура ctype имеет указатель на пустоту.Python Ctypes преобразует указатель void в nonetype и long. Каковы последствия? Что это значит?
Пример прототип функции:
ExtFunc(
TestStruct* myVoidStruct
);
где мой C-эквивалентная структура определяется следующим образом:
typedef struct voidStruct
{
void* voidField;
} voidStruct;
Я пытаюсь создать такую структуру, но неизменно указатель недействительным интерпретируется Python как нечто иное, чем указатель на пустоту.
Каковы последствия этого, если таковые имеются? Означает ли это, что внешняя функция также интерпретирует этот элемент структуры как нечто иное, чем указатель на пустоту?
>>> class TestStruct(ctypes.Structure):
_fields_ = [("voidField", ctypes.c_void_p)]
>>> x = TestStruct()
И сразу же, voidField возвращается как NoneType
>>> type(x.voidField)
<type 'NoneType'>
Но, я могу создать и поддерживать пустой указатель за пределами структуры:
>>> y = ctypes.c_void_p(123)
>>> y
c_void_p(123L)
Как я уже сказал выше, я передаю свою структуру внешней функции. Когда функция завершается, структура элементов типа «длинный», с соответствующим значением
>>> x.voidField
88145984L
>>> type(x.voidField)
<type 'long'>
Почему теперь тип долго? И каково значение его ценности? Это адрес памяти указателя? Адрес памяти, на который указывает указатель? Или это значение первых нескольких байтов по адресу памяти, на который он указывает?