Ctypes и доступ к методам com-интерфейсаPython

Программы на Python
Ответить
Anonymous
 Ctypes и доступ к методам com-интерфейса

Сообщение Anonymous »

Я пытаюсь загрузить аудио из Windows Media Foundation, используя ctypes и com Python, но у меня возникли проблемы с его работой.

Проблема в том, что мне нужен объект интерфейса IMFAttributes, чтобы использовать его методы после создания, в этом примере SetUINT32. Итак, чтобы получить объект указателя, я использую attrib_config.contents, который возвращает объект IMAttributes. Однако попытка доступа к каким-либо методам приводит к ошибке доступа на чтение.

Вот соответствующий код, без спама всего файла.

Код: Выделить всё

class IMFAttributes(com.IUnknown):
_methods_ = [
.....
('SetUINT32',
com.STDMETHOD(POINTER(GUID), c_uint32))
]

MFCreateAttributes = mfplat.MFCreateAttributes
MFCreateAttributes.restype = HRESULT
MFCreateAttributes.argtypes = [POINTER(POINTER(IMFAttributes)), c_uint32]
Что должно соответствовать рекомендациям Microsoft:

Код: Выделить всё

HRESULT MFCreateAttributes(
IMFAttributes **ppMFAttributes,
UINT32        cInitialSize
)
По сути, это один двойной указатель и int32.

Поэтому я все инициализировал и создал как таковое:< /p>

Код: Выделить всё

MF_LOW_LATENCY = com.GUID(0x9c27891a, 0xed7a, 0x40e1, 0x88, 0xe8, 0xb2, 0x27, 0x27, 0xa0, 0x24, 0xee)

MFStartup(MF_VERSION, 0)

attrib_config = POINTER(IMFAttributes)()
result = MFCreateAttributes(byref(attrib_config), 1)

attrib_config.contents.SetUINT32(byref(MF_LOW_LATENCY), 1)
результат возвращается как S_OK (0), но после того, как я пытаюсь использовать SetUINT32, я мгновенно получаю сообщение об ошибке OSError: исключение: чтение нарушения прав доступа 0xFFFFFFFFFFFFFFFF

Я новичок в ctypes, поэтому буду благодарен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/604 ... ce-methods
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»