【问题标题】:Win32Com connection failure to Autocad via PythonWin32Com 通过 Python 连接到 Autocad 失败
【发布时间】:2012-03-08 16:05:34
【问题描述】:

我需要通过 COM 接口连接和控制 AutoCAD。为此,我使用 Python。在我第一次尝试使用非常基本的 sn-p(1) 时,我遇到了一个错误。代码是:

import win32com.client
acad = win32com.client.Dispatch("AutoCAD.Application")
doc = acad.ActiveDocument
doc.Utility.Prompt("Hello from Python\n")

当我尝试运行它时,我得到了这个:

Traceback (most recent call last):
  File "C:\Users\SBYSMR10\Desktop\recipe-440493-1.py", line 2, in <module>
    acad = win32com.client.Dispatch("AutoCAD.Application")
  File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221005, 'Invalid class string', None, None)

我安装了 Python 2.6 和 AutoCAD LT 2009。我通过网络搜索解决方案,但找不到任何解决方案。那么你能帮我解决这个问题吗?


(1) 代码取自@Tom Haws 的blog

【问题讨论】:

  • 嘿! :-) 这是我博客中的 AutoCAD-Python 连接代码吗?酷!
  • 据我记忆,是的:)

标签: python com pywin32 autocad win32com


【解决方案1】:

AutoCAD LT 版本不支持自动化 (discussion in Autodesk group)。

如果您能够安装完整的 AutoCAD 版本,我建议您使用 comtypes 包。使用win32com,您无法将实体添加到文档中,因为 AutoCAD 需要类型代码为 VT_ARRAY | VT_I2 or VT_ARRAY | VT_R8 的变体作为参数,例如InsertionPoint.

examples in comtypes documentation

【讨论】:

  • 如果这行得通,那就太棒了。我希望尝试并报告。
  • 实际上,win32com 确实可以工作(使用 Acad2010),但确实需要一些额外的工作。 VARIANT 确实会导致问题,但不是因为 win32com 不知道如何处理它们。问题(就我而言)是 makepy/genpy 错误地定义了所有 insert 代理(我煞费苦心地手动纠正了)。事实证明,AutoCAD 期望 VARIANT_ARRAY 的 VARIANTS,但 makepy 并没有定义多少有些多余的外部 VARIANT_ARRAY,而只是定义了类型化变量的数组。一旦我用额外的数组包装了所有函数参数,INSERT ENTITY 就工作得很好!
猜你喜欢
  • 2012-02-19
  • 2011-12-21
  • 2015-06-02
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多