Пишу модуль для AutoCAD 2014 на VB.NET, который просто перечисляет имена всех листов в текущем документе:
1. Код следующий:
Imports System
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Runtime
...
Public ClassCheckProblem
<CommandMethod("JustCheckCOM")> _
Public Sub JustCheckCOM()
Dim acAppComObj As AcadApplication
acAppComObj = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
Dim acDocComObj As AcadDocument
acDocComObj = acAppComObj.ActiveDocument
For i = 0 To acDocComObj.Layouts.Count - 1
MsgBox(acDocComObj.Layouts.Item(i).Name)
Next i
End Sub
End Class
...
2. Модуль подключаю к AutoCAD с помощью команды NETLOAD.
3. На компьютере, на котором модуль разрабатывался открывается и работает замечательно!
4. Стоит перенести этот модуль на другой компьютер - ВСЁ, ПРИЕХАЛИ... получаем следующее сообщение:
Что можно сделать в таком случае?
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.
************** Текст исключения **************
System.InvalidCastException: Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "Autodesk.AutoCAD.Interop.AcadApplication". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{070AA05D-DFC1-4E64-8379-432269B48B07}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
в ACAD_NET_PDF.ACADPDF.GetAFoo.football()
в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
в Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
в Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()