Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从com定义的类型创建com_记录对象_Python_Win32com - Fatal编程技术网

Python 从com定义的类型创建com_记录对象

Python 从com定义的类型创建com_记录对象,python,win32com,Python,Win32com,我刚刚开始使用win32com.client模块尝试编写一个Python程序,该程序使用COM接口来控制MicroStation,这与我从Excel控制MicroStation的方式非常相似 我的问题是创建COM库中定义的类型的对象,即COM_记录,在我的例子中是Point3d。Point3d基本上是一个由3个双X,Y,Z组成的C结构 struct Point3d { double X; double Y; double Z; } 在Excel中,在引用Microsta

我刚刚开始使用win32com.client模块尝试编写一个Python程序,该程序使用COM接口来控制MicroStation,这与我从Excel控制MicroStation的方式非常相似

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

struct Point3d {
    double X;
    double Y;
    double Z;
}
在Excel中,在引用MicrostationDGN库后,我可以访问Point3d数据类型,并且可以轻松地将带有
Dim newpoint的新变量定义为Point3d

如何在Python中实现同样的功能

谢谢

另外,我尝试创建一个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
你在找我

从文档中(粗略地)引用,您需要:

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

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

r = win32com.client.Record("RecordName", object)
其中“RecordName”是记录的名称,“object”是&any* 在同一类型库中定义的COM对象

我找不到这种类型的对象来实例化所描述的com_记录,但我设法找到了一个返回所需对象的函数

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

我在这里找到了一些信息,但是我仍然不知道如何制作我需要的com_记录对象。谢谢你的回复!我刚试过,但它产生了同样的错误。。。TypeError:只有com_记录对象可以用作记录库。我试图引导您远离ctypes,转向纯python(命名为tuple)方法。但是,如果您计划将生成的点对象传递给您的问题中未提及的一些例程,那么是的,您必须遵循该接口的文档。您在评论中提到一个URL,建议使用windows特定的COM支持,而不是python的可移植ctypes支持。