Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Пашин Евгений от 21-08-2015, 08:03:48

Название: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 08:03:48
<loadFromRemoteSources enabled="true"/> вставил в файл acad.exe.config и dll-ка прошла!

Теперь другая проблема.

Проблема c Autodesk.Autocad.Interop.AcadApplication... Не знаю с чего начать!

Попробую подробно описать свою проблему и желание:

1. Работаю с AutoCAD 2014
2. Пишу dll-ку на Visual Basic 2013
3. Создал проект для перенастройки листов чертежа с физических принтеров на принтер DWG_To_PDF.pc3
4. Свой код я писал под библиотеку Autodesk.Autocad.Interop

Код - vb.net [Выбрать]
  1.         <CommandMethod("ReconfigurerLayoutsToPDF")> _
  2.         Public Sub ReconfigurerLayoutsToPDF()
  3.             Dim acAppComObj As AcadApplication
  4.  
  5.             Dim strProgId As String = "AutoCAD.Application"
  6.             On Error Resume Next
  7.             ' Получаем текущий процесс Автокада для текущего чертежа!
  8.             acAppComObj = GetObject(, strProgId)
  9.             ' Если в результате соединения с Автокадом произошла ошибка, тогда пытаемся подключить новый объект
  10.             If Err.Number > 0 Then
  11.                 Err.Clear()
  12.                 On Error Resume Next
  13.                 acAppComObj = CreateObject(strProgId)
  14.                 If Err.Number > 0 Then
  15.                     Err.Clear()
  16.                     Msgbox "Увы, ничего не произойдет!"
  17.                     Exit Sub
  18.                 End If
  19.  
  20.                 Exit Sub
  21.             End If
  22.  
  23.             Dim acDocComObj As AcadDocument
  24.             acDocComObj = acAppComObj.ActiveDocument
  25.             ...
  26.              ' Здесь процедура перенастраивания с физических принтеров на принтер PDF
  27.            Dim i as Long
  28.  
  29.            For i = 0 To acDocComObj.Layouts.Count - 1
  30.                     Select Case acDocComObj.Layouts.Item(i).Name
  31.                          Case Is <> "Model", "Модель"
  32.                          ' Здесь большой код и т.д.
  33.                      End Select
  34.             Next i
  35.             ...
  36.  
  37.         End Sub

5. Была загвоздка с подключением dll-ки на другой компьютер (AutoCAD 2014, Windows XP)
6. Устранил проблему с помощью изменения файла acad.exe.config в папке, в которой находится файл acad.exe
7. dll-ка подключается, НО возникла ситуация, что процедура не работает, потому что идет отработка ошибки, которая приводит меня на строку

Код - vb.net [Выбрать]
  1. Msgbox "Увы, ничего не произойдет!"

8. Как бы это объяснить проще: Я раньше работал с VBA / ActiveX AutoCAD 2014 и пользовался всей простой подключения к текущему чертежу без проблем. А в данном случае я, как бы, подключаюсь к AutoCAD с помощью библиотеки, НО по умолчанию библиотека не знает какие сейчас текущие приложение и документ! Мне нужно найти очень простой способ определить какое сейчас текущее приложение пользуется моей dll-кой, а также какой сейчас текущий документ, чтобы процедура смогла отработать как надо именно для данного чертежа!
9. Как я понимаю, на компьютере с операционной системой Windows XP получение текущих приложения и документа не произошло, поэтому моя процедура заканчивается сообщением:

Код - vb.net [Выбрать]
  1. Msgbox "Увы, ничего не произойдет!"






Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 08:30:04
Ещё раз. Последний. Для каждого нового (несвязанного напрямую с предыдущим) вопроса создавай новую тему в правильном разделе!

Для создания новой темы:


(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F9170%2F7842324.4%2F0_1059ed_abeb2e9b_orig.png&hash=c72b110800a1fe28f2548214d894bf74)
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 08:31:25
Проблема c Autodesk.Autocad.Interop.AcadApplication... Не знаю с чего начать!
Где проблема? Ничего не понял. Объясняй пожалуйста четко и понятно. Если нужно, то с кодом, картинками, видео.
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 08:47:29
У меня нет волшебной кнопки НОВАЯ ТЕМА!
Проблему, как смог, уточнил )

Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 08:56:09
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2F&hash=c22fb92101a29a8eea42a98c45872d65)
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 08:56:30
У меня нет волшебной кнопки НОВАЯ ТЕМА!
Есть. Смотри внимательно это видео:

Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 09:00:00
Спасибо за видео :)

Извиняюсь за глупость, но я на форуме первые два дня и к сожалению не знаю, где что лежит ...
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 09:00:43
Читай: http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-BFFF308E-CC10-4C56-A81E-C15FB300EB70
Результат:
Код - vb.net [Выбрать]
  1. Dim acAppComObj As AcadApplication
  2. acAppComObj = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication

Но я бы посоветовал бы изучить AutoCAD .NET API и писать на нём, а не переписывать код с VBA.
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 09:05:47
Сделал:

Код - vb.net [Выбрать]
  1.             Dim acAppComObj As AcadApplication
  2.  
  3.             acAppComObj = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
  4.  
  5.             Dim acDocComObj As AcadDocument
  6.             acDocComObj = acAppComObj.ActiveDocument

Результат:

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentException: Empty file name is not legal.
Parameter name: sourceFileName
   at System.IO.File.Copy(String sourceFileName, String destFileName)
   at ACAD_NET_PDF.ACADPDF.Gallurgy_Transfer_Layouts_To_PDF_Printer.ReconfigurerLayoutsToPDF() in D:\Пашин\Visual Studio 2013\Projects\ACAD_NET_PDF\ACAD_NET_PDF\ACADPDF.vb:line 67
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()


(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2F&hash=c22fb92101a29a8eea42a98c45872d65)





Как я понял он указывает на ошибку на 67 строке:

Код - vb.net [Выбрать]
  1. IO.File.Copy(acAppComObj.ActiveDocument.FullName, Environ("TEMP") & "\" & _
  2.                                                                       IO.Path.GetFileNameWithoutExtension(acAppComObj.ActiveDocument.FullName) & "_copy.dwg")

То есть моя процедура перед внесением изменений сохраняет копию файла в папке Temp!
Но получается, что эта строка и создает сбой!

Закомментировал - и заработало!

А как же теперь быть с созданием копии?

Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 09:08:03
Тебе же четко указали, что ошибка в строке 67:
at ACAD_NET_PDF.ACADPDF.Gallurgy_Transfer_Layouts_To_PDF_Printer.ReconfigurerLayoutsToPDF() in D:\Пашин\Visual Studio 2013\Projects\ACAD_NET_PDF\ACAD_NET_PDF\ACADPDF.vb:line 67
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 09:14:25
Я это понял, но неужели теперь нужно создавать новую тему о создании копии файла? Понимаю, что это уже проблема не этого форума! Хотя это странно, что простое создание копии теперь не срабатывает.
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Пашин Евгений от 21-08-2015, 09:39:57
Александр, Вы были правы!

Несохраненный файл dwg не может быть скопирован. После сохранения файла этой ошибки нет. Поставил обработку ошибки и все как по маслу.

Но у меня теперь другая проблема ))) Я уже создал по данной проблеме НОВУЮ ТЕМУ и теперь не знаю, что с ней делать? )))))
Название: Re: Проблема c Autodesk.Autocad.Interop.AcadApplication...
Отправлено: Александр Ривилис от 21-08-2015, 09:41:48
Но у меня теперь другая проблема ))) Я уже создал по данной проблеме НОВУЮ ТЕМУ и теперь не знаю, что с ней делать? )))))
Всё нормально. Напиши в ней, что ответ найден и в чем он заключается.