Использование интерфейса, производного от IUnknown, в python/pywin32Python

Программы на Python
Ответить
Anonymous
 Использование интерфейса, производного от IUnknown, в python/pywin32

Сообщение Anonymous »

Коротко: я пытаюсь вызвать метод в интерфейсе на основе IUknown. У меня есть некоторые детали, но они не соединяются.
Ситуация:

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

o1 = win32com.client.Dispatch("SomeProgId")
o2 = o1.SubObject
Подобъект не может быть создан совместно, o2._ole_obj_ представляет собой
`, как и ожидалось. также поддерживает другой интерфейс, IMyInterface, производную форму IUnknown, и я хочу вызвать метод на этом интерфейсе.
Следующее: р>

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

iid = pywintypes.IID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}") // IMyInterface iid
o2._oleobj_.QueryInterface(iid)
не работает с

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

TypeError: There is no interface object registered that supports this IID
Сам вызов Queryinterface завершается успешно (я проверил это в источнике COM-объекта), и если я укажу неподдерживаемый IID, сообщение об ошибке будет другим. Вызов завершается неудачей даже без попытки оценить результат.

Хорошо, поэтому я решил узнать о поддержке раннего связывания в Python. Документация кажется некачественной и устаревшей (или я что-то упускаю?)
Следующее удается:

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

tlb = comtypes.client.GetModule(r"path-to-dll")
x = tlb.IMyInterface()
Конечно, x использовать нельзя, но intellisense показывает правильные методы и т. д. для x.
Как правило, Intellisense показывает все элементы из библиотеки типов, так что эта часть, похоже, работает. .
Я тоже пробовал:

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

myitf = win32com.client.CastTo(o2._oleobj_, 'IMyInterface')
который завершается с ошибкой

Нет модуля с именем «win32com.gen_py.x0x2x4.IMyInterface»
Во время обработки из вышеуказанного исключения произошло другое исключение:
Traceback (последний вызов):
File "…\Python312-32\Lib\site-packages\win32com\client_init_.py", строка 213, в CastTo
mod = gencache.GetModuleForCLSID(target_clsid)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Нет модуля с именем «win32com.gen_py.x0x2x4.IMyInterface»

2.4 не является версией библиотеки типов, поэтому все выглядит хорошо.
Любой помочь?

Подробнее здесь: https://stackoverflow.com/questions/791 ... on-pywin32
Ответить

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

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

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

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

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