2014-11-04 29 views
3

下面的代碼效果很好,但它未能如果從應用程序的CherryPy方法與錯誤消息CoInitialize has not been called執行:win32com.client.Dispatch +的CherryPy = CoInitialize的沒有被調用

import win32com.client 
xl = win32com.client.Dispatch("Excel.Application") 
xl.quit() 

This post建議的解決方案對我的作品:

import pythoncom 
pythoncom.CoInitialize() 

的原因,我問一個問題,我已經有一個解決方案,是(1)我想知道我在做什麼(而不是做只是因爲我已經看到它工作一次)和(2)我不想冒險錯過一些重要的事情(和閱讀this post讓我覺得我失去了一些東西。)

我無法找到任何pythoncom.CoInitialize()文檔和pythoncom的來源是以下三行不幫我(也不Eclipse的+其中的PyDev說,該方法不存在):

# Magic utility that "redirects" to pythoncomxx.dll 
import pywintypes 
pywintypes.__import_pywin32_system_module__("pythoncom", globals()) 
+1

有關的CoInitialize和其他COM函數文檔查看MSDN – jwalker 2014-11-10 08:31:58

回答

6

我記不太清楚了,因爲我沒有用COM過去幾年的工作,但我猜你在每次使用它的線程初始化COM (再次我不確定每個COM分區)。由於CherryPy是線程服務器,您的請求由不同的線程處理,而不是您引導的。因此,我建議你嘗試在你的引導例程如下:

import pythoncom 


def onThreadStart(threadIndex): 
    pythoncom.CoInitialize() 

cherrypy.engine.subscribe('start_thread', onThreadStart) 
相關問題