了解如何在Python中使用COM

时间:2011-02-24 23:20:45

标签: python com

我正在尝试使用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

3 个答案:

答案 0 :(得分:1)

我认为,你没有看到任何方法,因为你已经得到了所谓的后期绑定,这意味着在运行时通过标准的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进行比较。也许这个方法仍然可以通过后期绑定来实现,但它并没有因为某些原因而进入包装器。

答案 1 :(得分:0)

答案 2 :(得分:0)

您应该考虑允许COM低级访问的comtypes