/ / implementar biblioteca de tipos de interface COM em python - python, com

implementar biblioteca de tipos de interface COM em python - python, com

Eu tenho um plugin que estou tentando criar como um exemplo para um aplicativo da empresa que trabalho. Eu estou tentando escrever este plugin em Python.

A maneira como a arquitetura do plugin funciona é que oO plugin precisa implementar uma interface definida em uma biblioteca de tipos COM. Portanto, é um cliente COM para essa biblioteca de tipos e, no final, é registrado como um servidor COM no registro e no aplicativo, dando-lhe o ClassID para o COM de ligação tardia pelo aplicativo.

Eu estou usando pythoncom e win32com e tenho usadomakepy.py para gerar o código python necessário do tipo libarary, mas não consigo encontrar uma maneira de criar uma classe que implemente a interface dessa biblioteca de tipos.

Qualquer ponteiro sobre isso seria muito apreciado.

obrigado

Quando tento executar o Dispatch para obter o objeto COM, recebo a seguinte exceção:

>>> interface = win32com.client.Dispatch("{68AC7909-804F-4D6D-861C-8382DAA7B029}") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:Python26libsite-packageswin32comclient__init__.py", line 95, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) File "C:Python26Libsite-packageswin32comclientdynamic.py", line 108, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "C:Python26Libsite-packageswin32comclientdynamic.py", line 85, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) pywintypes.com_error: (-2147221164, "Class not registered", None, None)

Respostas:

4 para resposta № 1

Você pode simplesmente usar win32com.client.Dispatch():

object = win32com.client.Dispatch("Class.Name")

Este é o exemplo do guia de início rápido do ActiveState:

>>> import win32com.client
>>> w=win32com.client.Dispatch("Word.Application")
>>> w.Visible=1
>>> w
<win32com.gen_py.Microsoft Word 8.0 Object Library._Application>

Se não funcionar, você pode usar win32com.client.gencache.EnsureModule() para ter certeza de que você gerou o módulo de cache correto.

from win32com.client import Dispatch
from win32com.client import gencache

# This comes from running: makepy.py -i "Microsoft Excel 14.0 Object Library"
gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 0, 1, 7)
obj = Dispatch("Excel.Application.14")

# gives <win32com.gen_py.Microsoft Excel 14.0 Object Library._Application instance ...>
print repr(obj)

A mesma coisa com os tipos (mais simples e suporta interfaces customizadas)

from comtypes.client import CreateObject
obj = CreateObject("Excel.Application")