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

时间:2017-12-21 00:29:17

标签: python win32com

我刚刚开始使用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

2 个答案:

答案 0 :(得分:0)

您正在寻找named tuple

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

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

答案 1 :(得分:0)

我是从图书馆作者那里找到的:

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

其中" RecordName"是记录的名称,'对象'是& any *   COM对象在同一类型库中定义。

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

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

startPoint = MS.Point3dFromXYZ(2.0,2.0,0.0)