我有一個插件,我試圖創建一個作爲我工作的公司的應用程序的示例。我試圖用Python編寫這個插件。在Python中實現COM接口類型庫
插件體系結構的工作方式是插件需要實現在提供的COM類型庫中定義的接口。因此,它是該類型庫的COM客戶端,最後通過爲應用程序爲後期綁定的COM提供ClassID,將其註冊爲註冊表和應用程序的COM服務器。
我正在使用pythoncom和win32com並使用makepy.py從類型libarary生成所需的python代碼,但我似乎無法找到一種方法來創建一個實現此類型庫接口的類。
任何指針,將不勝感激。
感謝
當我試圖運行調度,以獲得COM對象,我得到以下exeption:
>>> interface = win32com.client.Dispatch('{68AC7909-804F-4D6D-861C-8382DAA7B029}') Traceback (most recent call last): File "<stdin>", line 1, in <module> 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)
是的,我做了嘗試,並且我得到:pywintypes.com_error:(-2147221164, '類沒有註冊',無,無) – Caleb 2011-05-11 13:34:14
@Caleb:你得到了而不是?在這種情況下,你應該使用'win32com.gencache.EnsureModule()'。 makepy告訴你應該寫出確切的行。查看我的編輯例子。 –
2011-05-11 13:36:07
順便說一下,你的COM接口是否真的支持調度(即,它是否可以從VB6/VBScript/etc訪問)?如果沒有,你不能使用win32com - 你必須使用comtypes。或者,也許你會想要使用[comtypes](http://starship.python.net/crew/theller/comtypes/),因爲它的API比win32com好一點。 – 2011-05-11 13:43:45