При запуске модуля выдает «nil»?

Автор Тема: При запуске модуля выдает «nil»?  (Прочитано 16818 раз)

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

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Добрый день, ищу ответ на вопрос:
Что может быть причиной появления сообщения «nil» при запуске модуля? Модуль работает почти на всех машинах, кроме некоторых (в основном Windows 7)! У кого-нибудь происходило что-то подобное?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: При запуске модуля выдает «nil»?
« Ответ #1 : 10-11-2015, 11:52:03 »
Что может быть причиной появления сообщения «nil» при запуске модуля?
Будем гадать на кофейной гуще? nil обычно возвращают lisp-программы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: При запуске модуля выдает «nil»?
« Ответ #2 : 10-11-2015, 11:52:57 »
Александр меня опередил - только хотел сказать, что в C# нет nil

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: При запуске модуля выдает «nil»?
« Ответ #3 : 10-11-2015, 11:54:57 »
Будем гадать на кофейной гуще? nil обычно возвращают lisp-программы.

Да, LISP присутствует, но только для того, чтобы определить разрядность системы...

Сейчас более подробно ошибочку обозначу.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: При запуске модуля выдает «nil»?
« Ответ #4 : 10-11-2015, 11:56:01 »
LISP присутствует, но только для того, чтобы определить разрядность системы...
Ого! Какие извращения )))

Добавлено: хотя может и смысл есть - средствами .Net оказывается нельзя узнать разрядность системы

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: При запуске модуля выдает «nil»?
« Ответ #5 : 10-11-2015, 11:56:54 »
Команда: (load "T:/AutoCAD/Data_base/LISP/_SAPR/Model_To_Layouts/VPGallurgy/Start.LSP")
_netload Имя файла сборки: T:\AutoCAD\Data_base\LISP\_SAPR\Model_To_Layouts\VPGallurgy\Release_x64\GAMTL_090915.dll Не удалось загрузить сборку. Сведения об ошибке: System.IO.FileLoadException: Could not load file or assembly 'file:///T:\AutoCAD\Data_base\LISP\_SAPR\Model_To_Layouts\VPGallurgy\Release_x64\GAMTL_090915.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///T:\AutoCAD\Data_base\LISP\_SAPR\Model_To_Layouts\VPGallurgy\Release_x64\GAMTL_090915.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
   at loadmgd()


Как-то так...

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: При запуске модуля выдает «nil»?
« Ответ #6 : 10-11-2015, 11:58:34 »
Как-бы.... нужен текст Start.LSP. а не текст ошибки

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: При запуске модуля выдает «nil»?
« Ответ #7 : 10-11-2015, 12:00:12 »
Александр меня опередил - только хотел сказать, что в C# нет nil
Не совсем так. На C# можно написать lisp-функцию, которая может, если её вызвать, вернуть nil и это значение может быть напечатано в командной строке.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: При запуске модуля выдает «nil»?
« Ответ #8 : 10-11-2015, 12:02:37 »
Добавлено: хотя может и смысл есть - средствами .Net оказывается нельзя узнать разрядность системы

Модуль находится в сети, а пользователь нажимает кнопочку из палитры в AutoCAD-е, на своем компьютере (а я не в курсе, то ли машина х32 или х64). Поэтому запускается LISP, который определяет разрядность, а затем запускает необходимый модуль (в зависимости от разрядности). Если бы знать как определять это с помощью .NET до запуска модуля, я бы не извращался )))

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: При запуске модуля выдает «nil»?
« Ответ #9 : 10-11-2015, 12:03:42 »
средствами .Net оказывается нельзя узнать разрядность системы
A вот это разве не то что нужно? Environment.Is64BitOperatingSystem

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: При запуске модуля выдает «nil»?
« Ответ #10 : 10-11-2015, 12:06:31 »
Да и из C# можно всегда выполнить нативный код WinAPI.
Можно вот так вот:
Код - C# [Выбрать]
  1. static bool is64BitProcess = (IntPtr.Size == 8);
  2. static bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();
  3.  
  4. [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
  5. [return: MarshalAs(UnmanagedType.Bool)]
  6. private static extern bool IsWow64Process(
  7.     [In] IntPtr hProcess,
  8.     [Out] out bool wow64Process
  9. );
  10.  
  11. public static bool InternalCheckIsWow64()
  12. {
  13.     if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
  14.         Environment.OSVersion.Version.Major >= 6)
  15.     {
  16.         using (Process p = Process.GetCurrentProcess())
  17.         {
  18.             bool retVal;
  19.             if (!IsWow64Process(p.Handle, out retVal))
  20.             {
  21.                 return false;
  22.             }
  23.             return retVal;
  24.         }
  25.     }
  26.     else
  27.     {
  28.         return false;
  29.     }
  30. }

Взято отсюда

Добавлено:
Похоже я поторопился. Нужна ведь разрядность AutoCAD :)

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: При запуске модуля выдает «nil»?
« Ответ #11 : 10-11-2015, 12:06:55 »
Environment.Is64BitOperatingSystem
Появилось только начиная с версии 4.0, поэтому не всегда подходит некоторым...
Модуль находится в сети, а пользователь нажимает кнопочку из палитры в AutoCAD-е, на своем компьютере (а я не в курсе, то ли машина х32 или х64). Поэтому запускается LISP, который определяет разрядность, а затем запускает необходимый модуль (в зависимости от разрядности). Если бы знать как определять это с помощью .NET до запуска модуля, я бы не извращался )))
Ну если погуглить, то можно найти решение на net - это раз. Два - две dll: первая определяет разрядность, вторая - рабочая

Ну и где код-то?

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: При запуске модуля выдает «nil»?
« Ответ #12 : 10-11-2015, 12:07:22 »
A вот это разве не то что нужно? Environment.Is64BitOperatingSystem

Это точно было бы здорово, если бы не одно «НО», нам это нужно как-то сделать до запуска модуля! То есть, эта проверка должна быть запущена до старта модуля!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: При запуске модуля выдает «nil»?
« Ответ #13 : 10-11-2015, 12:07:45 »
Всё из-за этого:
Цитировать
System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework.
Читаем: http://adndevblog.typepad.com/autocad/2012/09/error-netloading-plugin-from-network-location.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: При запуске модуля выдает «nil»?
« Ответ #14 : 10-11-2015, 12:09:09 »
Ну и где код-то?

Код - Auto/Visual Lisp [Выбрать]
  1. (if (> (strlen (vl-prin1-to-string (vlax-get-acad-object))) 40)
  2.     (command "_netload" "T:\\AutoCAD\\Data_base\\LISP\\_SAPR\\Model_To_Layouts\\VPGallurgy\\Release_x64\\GAMTL_090915.dll")
  3.     (command "_netload" "T:\\AutoCAD\\Data_base\\LISP\\_SAPR\\Model_To_Layouts\\VPGallurgy\\Release_x32\\GAMTL_090915.dll")
  4. ); end of if
  5. (command "_GALMODELTOLAYOUTS")
  6. (command "_REGENALL")
  7.