繁体   English   中英

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

[英]win32com COM method call returning name of object's type instead of object

我的公司有一个内部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代码的一种round回的方式,但是我真的很想了解我在做任何决定之前发生的情况。 ,并且只是为了满足我自己的好奇心。

似乎正在发生的事情是win32com.client.dynamic决定我要调用的方法实际上是一个属性,因此该方法未正确调用。 我不确定,因为我不太了解如何做出决定,但是我能够通过强制生成方法而不是属性来解决问题。 您可以通过调用win32com的_FlagAsMethod来实现。 对于问题中的示例,它看起来像:

type1_object._FlagAsMethod("GetCurrentType2Object")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM