Ситуация:
Код: Выделить всё
o1 = win32com.client.Dispatch("SomeProgId")
o2 = o1.SubObject
`, как и ожидалось.
Код: Выделить всё
o2Следующее: р>
Код: Выделить всё
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
Хорошо, поэтому я решил узнать о поддержке раннего связывания в Python. Документация кажется некачественной и устаревшей (или я что-то упускаю?)
Следующее удается:
Код: Выделить всё
tlb = comtypes.client.GetModule(r"path-to-dll")
x = tlb.IMyInterface()
Как правило, 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
Мобильная версия