implementar la biblioteca de tipo de interfaz COM en Python

Tengo un complemento que estoy tratando de crear como muestra para una aplicación de la empresa para la que trabajo. Estoy tratando de escribir este plugin en Python.

La forma en que funciona la architecture del complemento es que el complemento debe implementar una interfaz definida en una biblioteca de tipos COM proporcionada. Por lo tanto, es un cliente COM para ese tipo de biblioteca y, al final, se registra como un servidor COM en el registro y la aplicación al otorgarle el ClassID para el COM de enlace tardío por la aplicación.

Estoy usando pythoncom y win32com y he usado makepy.py para generar el código de python necesario desde el tipo libarary, pero parece que no puedo encontrar una manera de crear una clase que implemente la interfaz desde esta biblioteca de tipos.

Cualquier sugerencia sobre esto sería muy apreciada.

Gracias

Cuando bash ejecutar Dispatch para obtener el objeto COM, obtengo la siguiente excepción:

>>> interface = win32com.client.Dispatch('{68AC7909-804F-4D6D-861C-8382DAA7B029}') Traceback (most recent call last): File "", line 1, in File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) File "C:\Python26\Lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "C:\Python26\Lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) pywintypes.com_error: (-2147221164, 'Class not registered', None, None)

Simplemente puede usar win32com.client.Dispatch() :

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

Este es el ejemplo de la guía de inicio rápido de ActiveState:

 >>> import win32com.client >>> w=win32com.client.Dispatch("Word.Application") >>> w.Visible=1 >>> w  

Si no funciona, puedes usar win32com.client.gencache.EnsureModule() para asegurarte de que has generado el módulo de caché correcto.

 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  print repr(obj) 

Lo mismo con comtypes (más simple y compatible con interfaces personalizadas)

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