首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从COM定义的类型创建com_record对象

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

Stack Overflow用户
提问于 2017-12-21 08:29:17
回答 2查看 265关注 0票数 2

我刚刚开始尝试使用win32com.client模块,尝试编写一个使用COM接口来控制MicroStation的Python程序,就像我过去在MicroStation中控制MicroStation的方式一样。

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

代码语言:javascript
复制
struct Point3d {
    double X;
    double Y;
    double Z;
}

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

我如何在Python中做同样的事情?

谢谢,

PS。我曾尝试创建一个C结构,但出现了一个错误

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-12-21 09:14:51

你在找named tuple

(粗略地)引用文档中的内容,您需要:

代码语言:javascript
复制
Point3d = namedtuple('Point3d', ['x', 'y', 'z'])
票数 0
EN

Stack Overflow用户

发布于 2017-12-23 05:17:28

我从图书馆的作者那里发现了这个:

代码语言:javascript
复制
r = win32com.client.Record("RecordName", object)

对象,其中"RecordName“是记录的名称,”

“是&在同一类型库中定义的任何* COM对象。

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

我找不到该类型的对象来实例化所述的com_record,但我设法找到了返回所需对象的函数。

代码语言:javascript
复制
startPoint = MS.Point3dFromXYZ(2.0,2.0,0.0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47916231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档