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

ADN Club => VBA => Тема начата: ediczr2012 от 25-12-2017, 20:03:56

Название: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 20:03:56
Доброго времени суток.

При работе с AutoCAD и подключение своих вкладок к ленте (Ribbon написанных .Net C#) возник вопрос:
Возможно ли автоматизировать выполнение command: "_netload"  (команда в AutoCAD) для выбора сборки .NET (*.dll), при помощи VBA ?

Примечание: Система AutoCAD 2013 (x64) + Windows 7 (х64).
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: Александр Ривилис от 25-12-2017, 20:19:24
1. Про VBA для этой цели забудь.
2. Есть два варианта, которые я мог бы рекомендовать:
a) запись в реестр - работает во всех версиях начиная с AutoCAD 2006.
b) использование Autoloader - работает начиная с AutoCAD 2012.
Если речь идёт об одной конкретной версии и об одном или нескольких dll-файлах, то первый способ проще.

Прописываешь в реестр что-то такое:

Код - Microsoft Registry [Выбрать]
  1. REGEDIT4
  2.  
  3. [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R19.0\ACAD-B001:419\Applications\TestDll]
  4. "LOADCTRLS"=dword:00000002
  5. "LOADER"="полный путь к dll-файлу (с двойными обратными слэшами) "\\""
  6. "DESCRIPTION"="название модуля"
  7. "MANAGED"=dword:00000001

И теперь при запуске AutoCAD 2013 Russian твой модуль грузится в AutoCAD.

Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 20:28:26
Подскажите, а почему VBA для этого не годится? (это невозможно)
Причина выбора мной VBA связан с тем, что AutoCAD запускается через макрос из Excel + в AutoCAD подгружаются файлы *.dvb.
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 20:37:20
Вот пример подключения *.dvb файла к AutoCAD

Код - Visual Basic [Выбрать]
  1. Sub Example_LoadDVB()
  2.     ' This example loads a DVB file and runs a macro
  3.    ' contained in the file using the RunMacro method.
  4.    '
  5.    ' This example uses a DVB file named drawline.dvb.
  6.    ' You should change the example to use a file on your computer.
  7.    '
  8.    ' * Note: If you open a DVB file and then run the example to load it, there will be an error
  9.    ' when the DVB file is unloaded.
  10.  
  11.     Dim FileName As String
  12.    
  13.     FileName = "c:\drawline.dvb"
  14.    
  15.     ' Load a sample VBA project DVB file
  16.    LoadDVB FileName
  17.    
  18.     ' Run the drawline sample macro
  19.    RunMacro "Module1.Drawline"
  20.    
  21.     ' Unload the drawline VBA project DVB file now.
  22.    UnloadDVB FileName
  23.    
  24.     MsgBox "The DVB file has been run!"
  25. End Sub

Нет возможности на подобие этого кода запросить доступ к библиотеке .dll

Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: Александр Ривилис от 25-12-2017, 21:12:44
Подскажите, а почему VBA для этого не годится? (это невозможно)
Из VBA можно только командой _NETLOAD загрузить dll-приложение. Отключить диалог можно через установку FILEDIA в 0. Потом не забыть его восстановить. Дальше в эту сторону продолжать не буду.
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 21:19:21
Наткнулся на код в интернете:

Код - Visual Basic [Выбрать]
  1. Sub startDLL( dirApp as String )
  2.  
  3. Dim memDlg
  4.  
  5.     memDlg = ThisDrawing.GetVariable("FILEDIA")
  6.    
  7.     ThisDrawing.SetVariable "FILEDIA", 0
  8.     ThisDrawing.SendCommand "netload " & vbCr & Chr(34) & dirApp & "\mydll.dll" & Chr(34) & vbCrLf
  9.     ThisDrawing.SendCommand "mycommand"
  10.    
  11.     ThisDrawing.SetVariable "FILEDIA", memDlg
  12.  
  13. End Sub

Как вариант запускать AutoCAD VBA макрос при помощи:

Код - Visual Basic [Выбрать]
  1. ' Run the drawline sample macro
  2.    RunMacro "Module1.startDLL"

Коряво ну можно попробовать так.
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 21:31:31
Попробовал так (коряво, ну пока сообразить не могу):

Запускает через командную строку в AutoCAD библиотеку .dll

Код VBA:
Код - Visual Basic [Выбрать]
  1. Sub startDLL()
  2.    
  3.     ThisDrawing.SendCommand "netload " & vbCr & Chr(34) & dirApp & "C:\ACadRibbon\ACadRibbon\ACadRibbon\ACadRibbon\bin\Debug\ACadRibbon.dll" & Chr(34) & vbCrLf
  4.    
  5. End Sub

Есть предложение как привести в божеский вид ?

Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: ediczr2012 от 25-12-2017, 21:47:23
Код - Visual Basic [Выбрать]
  1. Sub startDLL2()
  2.  
  3. Dim memDlg As String
  4. Dim FileNameDLL As String
  5.  
  6. memDlg = "C:\ACadRibbon\ACadRibbon\ACadRibbon\ACadRibbon\bin\Debug\"
  7. FileNameDLL = "ACadRibbon.dll"
  8.    
  9.     ThisDrawing.SendCommand "netload " & Chr(34) & memDlg & FileNameDLL & Chr(34) & vbCrLf
  10.    
  11.  
  12. End Sub

В AutoCAD VBA подключает библиотеку ACadRibbon.dll
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: Алексей Кулик от 25-12-2017, 22:20:57
Насколько я помню, в 2018 VBA сняли поддержку Chr. От слова совсем. НАстоятельно рекомендую прислушаться к совету #2.
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: Pavgur от 06-04-2019, 22:49:29
И всё же, на эту тему есть статья в AUTODESK KNOWLEDGE NETWORK: "Как автоматически загружать файлы DLL в AutoCAD" (http://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/RUS/How-to-autoload-DLLs-with-AutoCAD.html)

По-моему просто.
Цитировать
Для автоматической загрузки файлов DLL можно выполнить следующие действия.
С помощью проводника откройте папку c:\program files\autodesk\autocad 20xx\support.
Проверьте, есть ли в ней файл с именем acad20xxdoc.lsp. Если есть, откройте его с помощью редактора ASCII, например notepad.exe. Если файла нет, создайте его с помощью редактора ASCII.
Добавьте список DLL, который необходимо загружать, используя следующую структуру:
(command "_netload" "C:/folder1/folder2/my_DLL_1.DLL")
(command "_netload" "C:/folder1/folder2/my_DLL_2.DLL")
(command "_netload" "C:/folder1/folder2/my_DLL_3.DLL")
(command "_netload" "C:/folder1/folder2/my_DLL_4.DLL")

Обновите путь и имена файлов в соответствии со своими потребностями.

Сохраните файл acad20xxdoc.lsp.
Каждый раз при создании нового файла или открытии существующего будет загружаться список DLL.
Примечание 1. «xx» означает версию AutoCAD, например, файл ACAD20xxdoc.lsp означает, что при работе с AutoCAD 2015 имя файла должно быть ACAD2015doc.lsp.
Название: Re: Как автоматически загружать сборки .NET (*.dll) в AutoCAD
Отправлено: Александр Ривилис от 07-04-2019, 00:49:11
И всё же, на эту тему есть статья в AUTODESK KNOWLEDGE NETWORK: "Как автоматически загружать файлы DLL в AutoCAD"
1. В вопросе речь шла про загрузку из VBA.
2. Решение не самое удачное.