从COM定义的类型创建com_record对象

问题描述 投票:2回答:2

我刚刚开始使用win32com.client模块来尝试编写一个使用COM接口来控制MicroStation的Python程序,就像我以前从Excel控制MicroStation一样。

我遇到的问题是创建一个在COM库中定义的类型的对象,一个com_record,即在我的例子中是一个Point3d。 Point3d基本上是3个双X,Y,Z的C结构。

struct Point3d {
    double X;
    double Y;
    double Z;
}

在引用MicrostationDGN库之后的Excel中,我可以访问Point3d数据类型,并可以使用Dim newpoint As Point3d轻松定义新变量

我怎样才能在Python中做同样的事情?

谢谢,

PS。我试过创建一个C结构,但这给了我一个错误

from ctypes import Structure, c_double

class Point3d(Structure):
    _fields_ = [('X', c_double),
                ('Y', c_double)]

startPoint = Point3d()
startPoint.X = 1
startPoint.Y = 1

TypeError: Only com_record objects can be used as records
python win32com
2个回答
0
投票

你在找named tuple

从文档引用(大致),您想要:

Point3d = namedtuple('Point3d', ['x', 'y', 'z'])

0
投票

我从图书馆作者那里找到了这个:

r = win32com.client.Record("RecordName", object)

其中“RecordName”是记录的名称,“object”是在同一类型库中定义的任何* COM对象。

https://mail.python.org/pipermail/python-list/2003-August/214888.html

我找不到那种类型的对象来实例化描述的com_record,但我设法找到一个返回我需要的对象的函数。

startPoint = MS.Point3dFromXYZ(2.0,2.0,0.0)
© www.soinside.com 2019 - 2024. All rights reserved.