下面是一个用Python实现的COM服务器:
from win32com.server.exception import COMException
import pythoncom
import sys
import os
from string import Template
import logging
import logging.config
class Connector:
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
_reg_clsid_ = "{0CE25AEB-1AFA-4DA7-97BD-F93CDBFB376C}"
_reg_desc_ = "Python Test COM Server"
_reg_progid_ = "Compy.Connect"
_public_methods_ = ['Process', 'Status']
_public_attrs_ = []
_readonly_attrs_ = []
def Process(self, what):
pass
def Status(self):
return Template("""
Current Directory: $dir
Installed: $script
PythonPATH: $pyPath
""").substitute(dir = os.getcwd(),
script = os.path.abspath(__file__),
pyPath = sys.path)
if __name__ == '__main__':
import win32com.server.register
win32com.server.register.UseCommandLine(Connector)
它注册正常。当它运行时,会导致以下情况发生在生产机器上,但不会发生在开发盒上:
>>> cc = CreateObject("Compy.Connect")
>>> cc.Status()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python26libsite-packagescomtypesclientdynamic.py", line 42, in _
_call__
return self._obj._comobj.Invoke(self._id, *args)
File "C:Python26libsite-packagescomtypesautomation.py", line 717, in Invo
ke
raise COMError(hresult, text, details)
_ctypes.COMError: (-2147352567, 'Exception occurred.', (u"Unexpected Python Erro
r: AttributeError: 'module' object has no attribute 'VARIANT'n", u'Python COM S
erver Internal Error', None, 0L, -2147467259))
>>>
我已经安装了通讯类型0.6.2。运行Python 2.6.6
VARIANT类是在Pywin32 build 217中引入的。请尝试在符合以下条件的计算机上安装最新版本它在上失败了。