【发布时间】:2019-02-06 05:40:04
【问题描述】:
我正在尝试获取一个实例以指向已运行的 AutoCAD 2016 应用程序,或者如果它未运行,则创建一个新实例。
这是一个简单的代码示例:
#Import needed modules
import os
import comtypes.client
from comtypes import COMError
from comtypes.client import CreateObject, GetModule, GetActiveObject
try:
acad = GetActiveObject("AutoCAD.Application.20")
print "AutoCAD is Active"
print "########"
except(OSError, COMError): #If AutoCAD isn't running, run it
acad = CreateObject("AutoCAD.Application.20",dynamic=True)
print "AutoCAD is successfuly Opened"
print "########"
当 AutoCAD 未运行时,函数 CreateObject 工作成功且仅当 dynamic 设置为 true .. 但 GetActiveObject 引发 Traceback 错误
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 250, in CreateObject
return _manage(obj, clsid, interface=interface)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface
interface = getattr(mod, itf_name)
AttributeError: 'module' object has no attribute 'IAcadApplication'
我见过this,但没有任何线索。
另外,我已经回到了 comtypes 的文档,上面写着
当 COM 对象已经在运行时,GetActiveObject 函数成功,并且已经在 COM 运行对象表中注册了自己。并非所有 COM 对象都这样做。
但这也没有给我任何线索。
P.S GetActiveObject 与其他应用程序(例如 ETABS 2016 和 SAP2000 v18)配合得很好
任何帮助和有见地的回复将不胜感激,在此先感谢
【问题讨论】:
-
> GetActiveObject 抛出
-
@Maxence 是的,我刚刚删除了指向
acad = GetActiveObject("AutoCAD.Application.20")行的第一部分,换句话说,问题很可能在于comtypes 本身的编码。
标签: python python-2.7 com autocad comtypes