我正在尝试使用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
?
答案 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)
您可能会发现此博文可用作背景信息:http://things-ive-learned-about-it.blogspot.co.uk/2010/08/com-dcom-in-python-comtypes-library.html
答案 2 :(得分:0)
您应该考虑允许COM低级访问的comtypes