Кнопка F1, файл PackageContents.xml и приложение на AutoLISP.

Автор Тема: Кнопка F1, файл PackageContents.xml и приложение на AutoLISP.  (Прочитано 22588 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Имя CUIX-файла прописано в PackageContents.xml. Там же прописано имя файла справки. Т.е. наведя курсор на иконку получаем имя CUIX-файла, а дальше через PackageContents.xml получаем имя файла справки.
Это тебе только так кажется. После того как BUNDLE загружен нет никакой взаимосвязи между CUIX и PackageContents.xml
Чтобы по F1 при наведении на иконку появлялась справка нужно делать xaml-файл:
http://adndevblog.typepad.com/autocad/2012/08/specifying-a-different-path-for-ribbon-cuix-extended-help-tooltips-using-xaml.html
Как я уже писал по F1 справка запускается только если запрос идёт в командной строке.
Само приложение не работает? А что говорит? Имей в виду, там часть приложения выполняется на удаленном сервере.
А просто не грузится: Initializing..._.setvar Enter variable name or [?]: ucsortho
Enter new value for UCSORTHO <0>: 0
Command: _.netload Assembly file name: C:\Users\Rivilis-AN\AppData\Roaming\Autodesk\ApplicationPlugins\IDEaL-Spring_web_v01_2014.bundle\Contents\bin\cnc14.dll Cannot load assembly. Error details: System.IO.FileLoadException: Could not load file or assembly 'file:///C:\Users\Rivilis-AN\AppData\Roaming\Autodesk\ApplicationPlugins\IDEaL-Spring_web_v01_2014.bundle\Contents\bin\cnc14.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///C:\Users\Rivilis-AN\AppData\Roaming\Autodesk\ApplicationPlugins\IDEaL-Spring_web_v01_2014.bundle\Contents\bin\cnc14.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, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, 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()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Но ко всему прочему похоже для F1 не работают относительные пути в PackageContents.xml, что конечно же является багом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще пару замечаний.
1) Должно быть HelpFile, а не Helpfile.
2) chm-файлы не приветствуются, т.к. настройками системы можно заблокировать их открытие (так в большинстве случаев и происходит). Рекомендуется использование htm-файла.
http://adndevblog.typepad.com/autocad/2012/04/autoloaderf1-help-integration.html
3) Создание расширенной помощи для команды: http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%202010%20User%20Documentation/index.html?url=WS1a9193826455f5ffba22e1113c6c30c0e-39dc.htm,topicNumber=d0e376084
4) Возьми готовый пример приложения из Магазина Приложений и поизучай его. Например:
https://apps.exchange.autodesk.com/ACD/en/Detail/Index?id=appstore.exchange.autodesk.com:JTBWorld-DimensionPatrol-Trial:en
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Это тебе только так кажется. После того как BUNDLE загружен нет никакой взаимосвязи между CUIX и PackageContents.xml
Это так, но я полагаю, что после загрузки PackageContents.xml в память формируется массив с данными из этого файла и указателями, при помощи которых можно добраться до данных. Во-всяком случае, так обычно делается, иначе зачем этот файл вообще нужен. Хотя я, конечно, понимаю, что это все домыслы, а реальность может оказаться много суровей.

Цитировать
Чтобы по F1 при наведении на иконку появлялась справка нужно делать xaml-файл:
Возможно это работает, но это нестандартный путь. А стандартный путь тоже работает - я изучил несколько приложений из Autodesk Exchange. Поэтому хотелось бы понять, почему не работает у меня.

Цитировать
А просто не грузится:
Странно... Но скорее всего, это система так странно реагирует на проблему с сетью, причем с твоей стороны: то ли ты работаешь через прокси и он настроен специфическим образом, то ли это защита сети "бдит". Эта dll-ка связывается с удаленным сервером, отправляет и принимает данные.

Цитировать
Но ко всему прочему похоже для F1 не работают относительные пути в PackageContents.xml, что конечно же является багом.
Вот это и настараживает - в изученых мной приложениях эти самые относительные пути прекрасно работают.

Цитировать
Должно быть HelpFile, а не Helpfile.
Это правильно, но в данном случае не помогает.

Цитировать
chm-файлы не приветствуются, т.к. настройками системы можно заблокировать их открытие (так в большинстве случаев и происходит). Рекомендуется использование htm-файла.
Менял chm на htm - не помогает.

Цитировать
Возьми готовый пример приложения из Магазина Приложений и поизучай его.
Уже изучал и не один... Кстати, именно тот пример, который ты рекомендуешь.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Странно... Но скорее всего, это система так странно реагирует на проблему с сетью, причем с твоей стороны: то ли ты работаешь через прокси и он настроен специфическим образом, то ли это защита сети "бдит". Эта dll-ка связывается с удаленным сервером, отправляет и принимает данные.
Прокси нет. Файервол выключен. dll-ка просто не загружается, т.е. как минимум в Initialize происходит Exception.
Возможно это работает, но это нестандартный путь.
Это именно стандартный путь, который появился задолго (как минимум за две версии) до появления BUNDLE.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 13-12-2014, 16:13:14

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Похоже, нашел причину. Она в формате вызова макро в cuix-файле.
У меня было: ^C^C^P(c:stw) и это не работает. Зато работает такой формат: ^C^C_stw. Еще бы знать, почему?
С chm-файлом тоже работает.

Цитировать
Прокси нет. Файервол выключен. dll-ка просто не загружается, т.е. как минимум в Initialize происходит Exception.
Совсем непонятно. За год это первое сообщение о незагружающейся dll-ке. А ты не мог бы попробовать загрузить ее напрямую - командной netload (dll-ка лежит в папке "bin")?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще бы знать, почему?
Это как раз очевидно (и я как-то тоже не обратил внимание у тебя в меню на это)-, т.к. (c:stw) трактуется AutoCAD'ом как вызов lisp-функции, а не запуск команды. А файл помощи привязывается именно к команде.
 
Совсем непонятно. За год это первое сообщение о незагружающейся dll-ке. А ты не мог бы попробовать загрузить ее напрямую - командной netload (dll-ка лежит в папке "bin")?
Интересный факт. Сегодня попробовал повторить это и dll-ка грузится и в 2013-ом и в 2014-ом. Что вчера с ней было - сейчас уже и не пойму.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Цитировать
Что вчера с ней было - сейчас уже и не пойму.
Видимо, не выспалась.:)

Спасибо за помощь!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Это конечно не моё дело, но почему-бы тебе не избавится от lisp, если ты всё-равно грузишь dll-ки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Так dll-ки не я писал. А вообще, просто руки не доходят - время никак не выберу. Но в планах есть...:)

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Это конечно не моё дело, но почему-бы тебе не избавится от lisp, если ты всё-равно грузишь dll-ки?
Кстати, не посоветуешь, что лучше почитать по программированию приложений для AutoCAD на VB .net?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, не посоветуешь, что лучше почитать по программированию приложений для AutoCAD на VB .net?
Если спрашиваешь мой совет, то порекомендую не читать ничего по VB.NET, а читать по C#. Андрей Бушман привел список литературы, к которому мне нечего добавить: Литература по программированию на .NET
По программированию под AutoCAD средствами .NET есть на данный момент только одна книга на русском языке: Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015, 462 с. ISBN 978-5-97060-066-5. обсуждаемая здесь: http://adn-cis.org/forum/index.php?topic=1097
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Спасибо! А не скажешь пару слов, чем C# лучше VB в контексте программирования под AutoCAD?
Да, и, если знаешь, что можно почитать на английском?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А не скажешь пару слов, чем C# лучше VB в контексте программирования под AutoCAD?
Я приверженец C-подобных языков (C/C++/C# и т.д.), а Basic/Visual Basic/VBA/VB.NET - это учебные языки. Это моя точка зрения и навязывать я ее не буду. C# - это родной язык для .NET, а VB.NET искусственно переделаный из VB.
Англоязычной литературы по C# для AutoCAD я честно говоря сейчас и не вспомню. Наверное ничего достойного мне не попадалось. Тебе нужно изучить сам язык программирования C#, возможности платформы .NET, а как программировать для AutoCAD мы тебя здесь научим. Не бойся. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
     Раньше ни когда справок не делал, а тут в App Store их автоматически генерят, ну и ради интереса свою написал. Из ленты всё нормально справку показывает, даже к нужному топику привязывается. Но что-то мне подсказывает, что желание обратиться к справке, у пользователя возникнет не при виде кнопки на ленте, а уже нажав на неё и вызвав команду, перед ним появится не маленькое такое диалоговое окно(в моём приложении). Вот и подумал, раз уже справка есть, чего бы в диалоге не добавить кнопку "Справка".
     Но вся сложность в том как этот файл справки найти?
AutoCAD как-то её(справки) находит, для вызова с ленты, для этого мы ему подсказываем и в PackageContents.xml пишем:
Код - XML [Выбрать]
  1. HelpFile="./Contents/Help/Import_Export.html"  
Но при этом сами мы его найти не можем
Код - Auto/Visual Lisp [Выбрать]
  1. (findfile "Import_Export.html")
вернёт nil, что и логично, потому что он не лежит "в путях поиска ..."
Можем ли мы рассчитывать, что наш boundle будет всегда ложиться в C:\ProgramData\Autodesk\ApplicationPlugins\, и тогда мы можем написать?
Код - Auto/Visual Lisp [Выбрать]
  1.  (Help "C:/ProgramData/Autodesk/ApplicationPlugins/Имя приложения.boundle/Contents/Help/Import_Export.html")

     Но так же в PackageContents.xml в разделе компонентов, в элементе RuntimeRequirements есть атрибут Support Path.
Проще тогда указать тут путь к нашему  HelpFile , а заодно и путь к нашим ресурсным dll для cuix файлов, и ещё чего-нибудь, не будет ли это злоупотреблением и через чур раздуванием списка "путей поиска вспомогательных фалов..."? Или закинуть все эти файлы в одну папку в общую кучу, чтоб каша была, и тогда только один путь в Support Path?