Тема: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Здравствуйте, коллеги!
Привожу код загрузки AutoCAD:

Private Sub CallProgDWG()

        Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication
        Dim StrCommand, FullNameFileDWG, NameFileDWG As String
        FullNameFileDWG = mass_dwg(0)
        NameFileDWG = System.IO.Path.GetFileName(FullNameFileDWG)
        MyPrinterLISP = Replace(MyPrinter, "\", "\\")
        StrCommand = "(load " & Chr(34) & "plot.vlx" & Chr(34) & ") (plotexe t(list " & Chr(34) & UCase(MyPrinterLISP) & Chr(34) & " nil nil " & Chr(34) & UCase(NameFileDWG) & Chr(34) & " " & Chr(34) & MyStyle & Chr(34) & " t)) "

        On Error Resume Next

        acadApp = GetObject(, "AutoCAD.Application.18")
        If Err.Number > 0 Then
            Err.Clear()
            acadApp = CreateObject("AutoCAD.Application.18")
            If Err.Number > 0 Then
                MsgBox(Err.Description)
                Exit Sub
            End If
        End If

        acadApp.Visible = True

        acadApp.Documents.Open(FullNameFileDWG)
        acadApp.ActiveDocument.SendCommand(StrCommand)

    End Sub

Подключены следующие библиотеки:
1) C:\Program Files\Autodesk\AutoCAD Architecture 2012\acdbmgd.dll
2) C:\Program Files\Autodesk\AutoCAD Architecture 2012\acmgd.dll
3) Autodesk.AutoCAD.Interop.dll
4) Autodesk.AutoCAD.Interop.Common.dll

Почему AutoCAD 2012 грузится не стабильно?
Помогите по возможности, долго не можем найти решение?

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

1. Библиотеки 1) и 2) отключить - их нельзя использовать во внешнем приложении - только в dll-файле, который грузится внутрь AutoCAD. 
2. В чем заключается нестабильность?

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Нестабильность заключается что объекта автокада не виден на экране а в процессах висит, и еще не каждый раз загружается строка из SendCommand

(изменено: Александр Ривилис, 27 сентября 2012г. 17:45:20)

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Из внешнего приложения нужно проверять доступность AutoCAD для выполнения каких-либо действий при помощи проверки acadApp.GetAcadState().IsQuiescent, причем делать это постоянно.

P.S.: Нигде не увидел в коде чтобы запущенный AutoCAD завершался.

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Спасибо большое я написала вот так:

Private Sub CallProgDWG()

        Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication
        Dim StrCommand, FullNameFileDWG, NameFileDWG As String
        FullNameFileDWG = mass_dwg(0)
        NameFileDWG = System.IO.Path.GetFileName(FullNameFileDWG)
        MyPrinterLISP = Replace(MyPrinter, "\", "\\")
        StrCommand = "(load " & Chr(34) & "plot.vlx" & Chr(34) & ") (plotexe t(list " & Chr(34) & UCase(MyPrinterLISP) & Chr(34) & " nil nil " & Chr(34) & UCase(NameFileDWG) & Chr(34) & " " & Chr(34) & MyStyle & Chr(34) & " t)) "

        On Error Resume Next

        acadApp = GetObject(, "AutoCAD.Application.18")
        If Err.Number > 0 Then
            Err.Clear()
            acadApp = CreateObject("AutoCAD.Application.18")
            If Err.Number > 0 Then
                MsgBox(Err.Description)
                Exit Sub
            End If
        End If
        acadApp.Visible = True

        While (acadApp.GetAcadState().IsQuiescent <> True)
            Thread.Sleep(100)
        End While

        acadApp.Documents.Open(FullNameFileDWG)
        acadApp.ActiveDocument.SendCommand(StrCommand)


    End Sub

Так подойдет?

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Вообще-то не совсем. Оформим в виде процедуры:

Private Sub WaitIdle
          While (acadApp.GetAcadState().IsQuiescent <> True)
            Thread.Sleep(100)
        End While
End Sub

И будем вызывать перед каждым (!!!) обращанием к AutoCAD:

Call WaitIdle
acadApp.Visible = True 
Call WaitIdle
acadApp.Documents.Open(FullNameFileDWG)
Call WaitIdle
acadApp.ActiveDocument.SendCommand(StrCommand) 

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Спасибо большое!

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Александр, при отладке возникла ошибка Не удается создать компонент ActiveX.
Как с этим быть?

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Ольга Д пишет:

Александр, при отладке возникла ошибка  Не удается создать компонент ActiveX .

Как с этим быть?

Ну как минимумум понять на каком коде это происходит.

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

на том же который был но только дополненный
привожу год:

 Private Sub CallProgDWG()

        Dim StrCommand, FullNameFileDWG, NameFileDWG As String
        FullNameFileDWG = mass_dwg(0)
        NameFileDWG = System.IO.Path.GetFileName(FullNameFileDWG)
        MyPrinterLISP = Replace(MyPrinter, "\", "\\")
        StrCommand = "(load " & Chr(34) & "plot.vlx" & Chr(34) & ") (plotexe t(list " & Chr(34) & UCase(MyPrinterLISP) & Chr(34) & " nil nil " & Chr(34) & UCase(NameFileDWG) & Chr(34) & " " & Chr(34) & MyStyle & Chr(34) & " t)) "

        On Error Resume Next

        acadApp = GetObject(, "AutoCAD.Application.18")
        If Err.Number > 0 Then
            Err.Clear()
            acadApp = CreateObject("AutoCAD.Application.18")
            If Err.Number > 0 Then
                MsgBox(Err.Description)
                Exit Sub
            End If
        End If

        Call WaitIdle()
        acadApp.Visible = True
        Call WaitIdle()
        acadApp.Documents.Open(FullNameFileDWG)
        Call WaitIdle()
        acadApp.ActiveDocument.SendCommand(StrCommand)

        acadApp = Nothing

    End Sub

    Private Sub WaitIdle()
        While (acadApp.GetAcadState().IsQuiescent <> True)
            Thread.Sleep(100)
        End While
    End Sub

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Ольга Д пишет:

на том же который был но только дополненный

На какой строке кода? Запустите под отладчиком.

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

при пошаговой отладке эта ошибка не всплыла все было нормально. как это устранить???

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Подскажите еще пожалуйста!
Какие еще проверки следует делать по приведенному коду, чтобы AutoCAD 2012 отображался на экране.

On Error Resume Next 

        acadApp = GetObject(, "AutoCAD.Application.18") 
        If Err.Number > 0 Then 
            Err.Clear() 
            acadApp = CreateObject("AutoCAD.Application.18") 
            If Err.Number > 0 Then 
                MsgBox(Err.Description) 
                Exit Sub 
            End If 
        End If 

        Call WaitIdle() 
        acadApp.Visible = True 
        Call WaitIdle() 
        acadApp.Documents.Open(FullNameFileDWG) 
        Call WaitIdle() 
        acadApp.ActiveDocument.SendCommand(StrCommand) 

        acadApp = Nothing

  Private Sub WaitIdle() 
        While (acadApp.GetAcadState().IsQuiescent <> True) 
            Thread.Sleep(100) 
        End While 
    End Sub 

Иногда при запуске приложения AutoCAD не видно на экране, но в процессах висит acad.exe. Иногда видны некоторые панели AutoCAD. И еще выходит сообщение: Не найден компонент ActiveX. Возможны ли еще какие проверки на доступность AutoCADa?

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Мне кажется, что нужно убрать "подключение" к уже запущенному AutoCAD, т.е. строку:

acadApp = GetObject(, "AutoCAD.Application.18") 

А в конце кода добавить завершение AutoCAD:

acadApp.Quit

Re: Нестабильно грузится AutoCAD 2012 из внешней программы на VB.NET

Спасибо. Попробую.