win32com COM方法调用返回对象的类型而不是对象

时间:2015-05-28 20:57:02

标签: python win32com

我的公司有一个内部C#库,我试图使用win32com从CPython 2.7调用。我们有一个对象,我称之为Type1,它位于C#名称空间中,我称之为Company.System.SubSystem1。此对象的一个​​特定方法(让我们称之为GetCurrentType2Object)返回Company.System.SubSystem2.Type2类型的对象。我的代码如下:

import win32com.client
type1_object = win32com.client.Dispatch("Company.System.SubSystem1.Type1")
type2_object = type1_object.GetCurrentType2Object()

问题是type2_object没有被赋予Type2对象;它得到字符串" Company.System.SubSystem2.Type2"。

同一个对象上还有其他方法返回void,整数或枚举值,并且这些方法似乎都成功了。没有其他方法可以让我尝试返回类类型,这是唯一的方法。

在运行我的代码之前,我已经尝试在相关库上使用makepy.py脚本,并且在解决这个问题之前它有自己的问题;生成的文件似乎包含实际接口的一小部分,其中不包含我需要的许多方法。 Microsoft COM对象查看器显示相同的子集,因此我不能在脚本上指责这一点,我放弃了尝试解决它。​​

我很清楚IronPython,我最终可能只是使用它,因为那将是一个更加迂回的方式来使用.NET代码,但我真的想了解什么&#39在做出任何决定之前发生在这里,只是为了满足自己的好奇心。

1 个答案:

答案 0 :(得分:0)

似乎可能发生的事情是win32com.client.dynamic正在决定我试图调用的方法实际上是一个属性,因此该方法不会被正确调用。我不确定,因为我真的不明白该决定是如何做出的,但我能够通过强制生成方法而不是属性来解决问题。你可以通过调用win32com的_FlagAsMethod来做到这一点。对于问题中的示例,它看起来像:

type1_object._FlagAsMethod("GetCurrentType2Object")

在尝试调用GetCurrentType2Object之前执行此操作,一切正常。