我需要在Outlook上使用几个线程(关于为什么的冗长解释...)。例如,第一个线程将擦除一个文件夹中的邮件,另一个线程将在其他位置进行一些过滤。
我知道我需要通过COM以及更特别是通过win32client和pythoncom来利用Outlook。但是我似乎无法正确编组线程。我的基本设置是这样:
import win32com.client
import pythoncom
olApp = win32com.client.Dispatch('Outlook.Application')
myStream = pythoncom.CreateStreamOnHGlobal()
marshalledOlApp = pythoncom.CoMarshalInterface(
myStream,
pythoncom.IID_IDispatch,
olApp,
pythoncom.MSHCTX_INPROC,
pythoncom.MSHLFLAGS_NORMAL
)
def cleanOutlook(marshalledOlApp):
print 'How can I make outlook COM object be available here?'
olApp = win32com.client.Dispatch(
pythoncom.CoGetInterfaceAndReleaseStream(
marshalledOlApp,
pythoncom.IID_IDispatch))
threads = [threading.Thread(target=cleanOutlook, args=(marshalledOlApp,)) for _ in range(2)]
_ = [thread.start() for thread in threads]
_ = [thread.join() for thread in threads]
执行.CoMarshalInterface()
时收到错误消息
ValueError: argument is not a COM object (got type=instance)
我查看了API并用谷歌搜索了我的问题,但似乎找不到解决方案。有谁知道如何在Outlook中利用许多线程?