【发布时间】:2013-11-18 09:07:14
【问题描述】:
我正在使用下面的代码来使用 autocad 对象。
Dim acadapp As AcadApplication
acadapp = GetObject(, "AutoCAD.Application")
'''并使用以下代码创建对象 -------------
acadapp = CreateObject("AutoCAD.Application")
收到错误“无法创建 ActiveX 组件”。 我尝试使用 18,19 和以下各种组合:
acadapp = GetObject(, "AutoCAD.Application.18")
但没有任何效果。 请帮忙。
@Locke:感谢您的回复。我尝试了您的解决方案,如下所示:
Dim acadType As Type
Try
acadapp =
System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application.18.1")
''Above code din't worked so tried below code also
' acadapp = DirectCast(Marshal.GetActiveObject("AutoCAD.Application.18.1"),
'AcadApplication)
Catch ex As Exception
acadType = Type.GetTypeFromProgID("AutoCAD.Application")
acadapp = DirectCast(Activator.CreateInstance(acadType, True), AcadApplication)
End Try
显示异常:
无法将“System.__ComObject”类型的 COM 对象转换为接口类型“AutoCAD.AcadApplication”。此操作失败,因为 IID 为“{8E75D910-3D21-11D2-85C4-080009A0C626}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
【问题讨论】:
-
基本检查表是 1:AutoCad 真的安装了吗? 2:您的程序是否以与 AutoCad 匹配的正确位数运行? 3:SysInternal 的 ProcMon 告诉你什么?
-
1) Autocad 在我的机器上正常运行。我已经用 VB6 编写了相同的代码。它工作正常。 Kingly 解释 2 和 3 清单。
-
@HansPassant 在他的第二点中谈论的是 32 位与 64 位,在您收到错误之后,这是接下来要查看的逻辑步骤。您导入到 Visual Studio 项目中的库,包含 AcadApplication,您是从 AutoDesk 的 ObjectArx 获得的吗?您需要确保根据项目的位数导入 64 位或 32 位版本的互操作库(Autodesk.AutoCAD.Interop.dll、AutoDesk.AutoCAD.Interop.Common.dll)。