用Python理解如何使用COM

4

我正在尝试使用COM在Python中实现类似于VB程序的等效功能。以下是来自VB程序的相关行:

eConCall = New Microsoft.Dynamics.GP.eConnect.eConnectMethods
eConCall.eConnect_EntryPoint(sConnectionString, EnumTypes.ConnectionStringType.SqlClient, myXmlDocument, EnumTypes.SchemaValidationType.None)

在Python中,我正在做:

import win32com.client
eConCall = win32com.client.Dispatch("Microsoft.Dynamics.GP.eConnect.eConnectMethods")

但是 eConCall 没有 eConnect_EntryPoint 方法。实际上,它似乎没有任何方法:

eConCall = win32com.client.gencache.EnsureDispatch("Microsoft.Dynamics.GP.eConnect.eConnectMethods")
dir(eConCall)

输出:

['CLSID', '_ApplyTypes_', '__doc__', '__eq__', '__getattr__', 
'__init__', '__module__', '__ne__', '__repr__', '__setattr__', 
'_get_good_object_', '_get_good_single_object_', '_oleobj_', 
'_prop_map_get_', '_prop_map_put_', 'coclass_clsid']

我相信我没有正确理解如何使用Dispatch以及如何在Python中获取对eConnectMethods的访问权限。有没有好心人可以帮助我?我该如何获取eConnectMethods的实例,以便我可以调用其上的eConnect_EntryPoint方法?


可能会有所帮助,附上由makepy生成的Python包装器内容(位于“gen_py”)。 - Andrey
2个回答

2

我认为,你没有看到任何方法,因为你使用了所谓的后期绑定,这意味着无论你尝试调用什么都会通过标准的COM IDispatch接口在运行时检查,只有当你使用有效的方法/属性时它才能正常工作。否则你会得到运行时错误,就像在VBScript中一样。

看起来你的任务并不适合后期绑定的试错,也许你想尝试一下早期绑定的选项 - 可以查看这个链接 - http://oreilly.com/catalog/pythonwin32/chapter/ch12.html

我还建议你尝试一些更简单的COM示例,这将帮助你感受在Python中使用IDispatch的舒适度,比如通过在线可用的更简单的Excel或Word自动化示例进行检查。

更新好吧,我错过了你已经尝试创建早期绑定包装器的事实。看看makepy.py的结果(在\Lib\site-packages\win32com\gen_py\.py的某个地方),并将其与COM服务器的IDL进行比较。也许该方法仍然可以通过后期绑定获得,尽管由于某种原因它没有进入包装器。


0
你应该考虑使用comtypes,它允许对COM进行低级别的访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接