gpt4 book ai didi

python - 使用 comtypes 创建 COM 对象

转载 作者:行者123 更新时间:2023-11-30 23:13:00 25 4
gpt4 key购买 nike

我正在尝试将一些旧的 VBA 代码移植到 Python。

在 VBA 中,我添加 Geo3D.dll 作为项目引用,然后使用:

Set P1 = New GEO3DLib.Point
P1.Set 1, 2, 3, 0.001

在Python中我尝试了这个:

import comtypes
import comtypes.client as cc
cc.GetModule('C:\\Program Files (x86)\\think3\\2009.3\\thinkdesign\\bin\\Geo3d.dll')
import comtypes.gen.GEO3DLib as Geo3d
pt = cc.CreateObject('Geo3d.Point', None, None, Geo3d.Point)

但我收到此错误:

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
pt = cc.CreateObject('Geo3d.Point', None, None, Geo3d.Point)
File "C:\Anaconda3\lib\site-packages\comtypes\client\__init__.py", line 238, in CreateObject
obj = comtypes.CoCreateInstance(clsid, clsctx=clsctx, interface=interface)
File "C:\Anaconda3\lib\site-packages\comtypes\__init__.py", line 1217, in CoCreateInstance
iid = interface._iid_
AttributeError: type object 'Point' has no attribute '_iid_'

将最后一行替换为:

pt = Geo3d.Point
pt.Set(1., 2., 3., 0.001)

我收到此错误:

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
pt.Set(1., 2., 3., 0.001)
AttributeError: type object 'Point' has no attribute 'Set'

有什么想法吗?

最佳答案

确保 python 实现和 thinkdesign 库针对相同的平台类型进行编译:64 位或 32 位。

我测试如下:

>>> p=Dispatch('Geo3d.Point')
>>> p
<win32com.gen_py.think3 thinkdesign Type Library.IPoint instance at 0x59554312>
>>> p.Set(0,0,0)
>>> p.X
0.0

或使用comtypes:

>>> point=comtypes.CoCreateInstance(comtypes.GUID.from_progid('Geo3d.Point'))
>>> ipoint=point.QueryInterface(Geo3d.IPoint)
>>> ipoint.Set(0,0,0)
0
>>> ipoint.X
0.0

关于python - 使用 comtypes 创建 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com