有了Python,你就可以使用COM服务器,例如微软的XML剖析器,或者你可以创建COM服务器。具有了创建COM服务器的能力,你就能够从根本上扩展脚本语言或者Windows应用程序的丰富性。
同使用ATL创建相当的对象相比,使用Python来创建COM服务器简直是太简单了。首先,你要创建一个普通的Python类。然后,你需要向这个类添加一个数值字段,这个类会公开方法和属性,并为辨别COM的对象。
你需要定义三个强制字段。第一个字段是_public_methods_。_public_methods_列出了你希望在这个类里公开的方法。
第二个字段是一个叫做_reg_progid_的友好类(friendly class),它包含一个带有类名称的字符串,而CreateObject会使用它。例如,如果我们对_reg_progid_使用“Extractor.Extract”,那么在VBScript里,我们就会使用CreateObject:
set extractor = CreateObject("Extractor.Extract")
第三个要定义的字段是_reg_clsid_。这是这样一个字符串,它包含用于这个类的唯一GUID。在Python里,你可以使用pythoncom.CreateGuid()来生成GUID。我创建GUID的一个简单捷径是使用Python控制台,将其复制和粘贴进类里。
下面是一个完整的Python COM服务器。
classURLExtractor:
_public_methods
= ["extract"]
_reg_progid_
= "URLExtractor.Extractor"
_reg_clsid_
= ""
def
extract(self, strHTML):
#URLExtractor
is defined elsewhere
parser
= URLExtractor()
parser.feed(strHTML)
parser.close()
return
parser.getAnchors()
为了完成这个类,我们需要在COM系统里注册它。在理想状况下,你希望你的COM服务器能够自己注册,而且你希望这个注册过程越简单越好。对于这个类来说,我们将做到这一步,即你所要做的只是运行这个脚本,它就会自己注册了。
if __name__ == "__main__":
import
win32com.server.register
try:
win32com.server.register.UseCommandLine(URLExtractor)
print
"URLExtractor successfully registered"
except:
print
"URLExtractor failed to register"
能够轻易迅速地创建COM服务器将是提高生产力的巨大动力。你可以像使用其他任何COM对象一样使用它。例如,你可以创建一个同ASP一起使用的COM服务器,并将Python的强大能力同ASP结合起来。