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

2024-10-03 17:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我的公司有一个内部C#库,我正试图使用win32com从cpython2.7调用它。我们有一个对象,我将其称为Type1,它位于C命名空间中,我将调用它公司.系统.子系统1. 这个对象的一个特定方法(我们称之为GetCurrentType2Object)返回一个类型为的对象公司.系统.子系统2.类型2。我的代码如下:

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

问题是type2\u对象没有被分配一个type2对象;它得到的是字符串“公司.系统.子系统2.Type2英寸。在

同一个对象上还有其他方法返回void、integers或enum值,这些方法似乎都成功了。没有其他方法可以返回类类型供我尝试,这是唯一的方法。在

我试过用makepy.py在运行我的代码之前在有问题的库上编写脚本,而且在走到这一步之前它也有自己的问题;生成的文件似乎包含了实际接口的一小部分,其中没有包含我需要的许多方法。microsoftcomobjectviewer显示了相同的子集,所以我不能把这归咎于脚本,我放弃了尝试去解决它。在

我知道IronPython,而且我很可能最终只会使用它,因为这是一种处理.NET代码的不太迂回的方式,但是我真的很想在做任何决定之前了解一下这里发生了什么,并且只是为了满足我自己的好奇心。在


Tags: 对象方法代码脚本client类型object系统
1条回答
网友
1楼 · 发布于 2024-10-03 17:25:41

可能发生的是win32com.client.dynamic网站正在确定我尝试调用的方法实际上是一个属性,因此无法正确调用该方法。我不确定,因为我不太明白这个决定是如何做出的,但是我可以通过强制生成一个方法而不是属性来解决这个问题。你可以通过调用win32com的_FlagAsMethod来实现。对于问题中的示例,它看起来像:

type1_object._FlagAsMethod("GetCurrentType2Object")

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

相关问题 更多 >