Как автоматически загружать сборки .NET (*.dll) в AutoCAD

Автор Тема: Как автоматически загружать сборки .NET (*.dll) в AutoCAD  (Прочитано 13591 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Доброго времени суток.

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

Примечание: Система AutoCAD 2013 (x64) + Windows 7 (х64).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
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.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Подскажите, а почему VBA для этого не годится? (это невозможно)
Причина выбора мной VBA связан с тем, что AutoCAD запускается через макрос из Excel + в AutoCAD подгружаются файлы *.dvb.

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Вот пример подключения *.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


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Подскажите, а почему VBA для этого не годится? (это невозможно)
Из VBA можно только командой _NETLOAD загрузить dll-приложение. Отключить диалог можно через установку FILEDIA в 0. Потом не забыть его восстановить. Дальше в эту сторону продолжать не буду.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Наткнулся на код в интернете:

Код - 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"

Коряво ну можно попробовать так.

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Попробовал так (коряво, ну пока сообразить не могу):

Запускает через командную строку в 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

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


Отмечено как Решение ediczr2012 26-12-2017, 21:56:53

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Код - 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

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Насколько я помню, в 2018 VBA сняли поддержку Chr. От слова совсем. НАстоятельно рекомендую прислушаться к совету #2.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Pavgur

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
    • Dwgshare
И всё же, на эту тему есть статья в AUTODESK KNOWLEDGE NETWORK: "Как автоматически загружать файлы DLL в AutoCAD"

По-моему просто.
Цитировать
Для автоматической загрузки файлов 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.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
И всё же, на эту тему есть статья в AUTODESK KNOWLEDGE NETWORK: "Как автоматически загружать файлы DLL в AutoCAD"
1. В вопросе речь шла про загрузку из VBA.
2. Решение не самое удачное.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение