Не открывается нужный раздел пользовательской справки по нажатию F1

Автор Тема: Не открывается нужный раздел пользовательской справки по нажатию F1  (Прочитано 56685 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
вот только когда я тестировал код, обозначенный в первом сообщении темы на домашнем нотике, там не было никаких виртуальных машин - всё установлено непосредственно на физ. машинке (хоть и дохлой до ужаса). Да и у юзеров когда тестировал - у них тоже физ. машины.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот теперь и этот код проверь на домашней машине и у юзеров. Тут если появится и справка AutoCAD, то её появление скорее всего имеет другую природу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Сделал тестовый пример на ObjectARX для AutoCAD 2013 и 2014 x86
Загружать при помощи _APPLOAD.
Команды для проверки:
ThroughAcedSetFunHelp - должна по нажатию F1 появится справка  с пунктом ThroughAcedSetFunHelp
ThroughAcedHelp - должна появится сразу справка с пунктом ThroughAcedSetFunHelp
У меня оба обозначенных варианта щимятся за справкой в Интернет. Запускал в AutoCAD 2013 x86. В обоих случаях в консоль AutoCAD выводится правильное полное имя CHM файла справки.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Отлично. Теперь есть что отсылать в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Для тестирования под AutoCAD 2010 x86
Команды ThroughAcedSetFunHelp и ThroughAcedHelp
Интересует откроется ли справка и если да, то какая.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Работают однако оба варианта (в смыле и та, и та команда). Надо писать helloword на аттрибут ComandMethod (мне сейчас не до того). Видимо косяк похитрее.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
ACAD 2010 Win7*32 - как и у автора - ThroughProcess - вызывает нужную справку, в остальных случаях по F1 - выскакивает автокадная.
Работают однако оба варианта. Надо писать helloword на аттрибут ComandMethod (мне сейчас не до того). Видимо косяк похитрее.
Нет. Тут уже дело и не в атрибуте, т.к.  P/Invoke для acedHelp у тебя не сработало, а acedHelp из ObjectARX сработало. Нужно передохнуть и подумать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
p/invoke относится к .Net api как я к техаским рейжирам (то есть никак), да может быть при какой-либо хитром условии компиляции и еще черт знает чем он срабатывает - но это поле для творчества "любителей", а никак не поддержки Api (хотя по возрасту версии им уже все равно). Аттрибут документирован - и пусть покажут как его заставить работать.
Я уж и не вспомню - но у меня не все работало через, например дин. вызов (InvokeMember), но это к багам я отнести никак не могу.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
И чтоб окончательно все запутать, я таки написал helloword в виде лисп функции (ихмо так проверять гораздо удобней):
Код - C# [Выбрать]
  1. open Autodesk.AutoCAD.ApplicationServices
  2. open Autodesk.AutoCAD.Runtime
  3. open Autodesk.AutoCAD.DatabaseServices
  4. open Autodesk.AutoCAD.EditorInput
  5. open System.Runtime.InteropServices
  6. [<DllImport("acad.exe",CallingConvention=CallingConvention.Cdecl,
  7.             CharSet=CharSet.Auto)>] extern int acedSetFunHelp(string,string,string)
  8. let Rb=function
  9.   |null->[]
  10.   |(rb:ResultBuffer)->rb.AsArray()|>Array.toList
  11. let (|AcStr|_|) (x:TypedValue)=
  12.   match enum<LispDataType>(x.TypeCode|>int) with
  13.     |LispDataType.Text->x.Value:?>string|>Some
  14.     |_->None
  15. [<LispFunction "TestHelp">]
  16. let TestHelp arg=arg|>Rb|>function
  17.   |[AcStr fname;AcStr path;AcStr topic]->acedSetFunHelp(fname,path,topic)|>ignore
  18.   |_->"Ошибка аргумента - (testhelp имя_функции путь глава)"
  19.          |>Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage
Код - Auto/Visual Lisp [Выбрать]
  1. Команда: netload
  2. Команда: (testhelp "example" "d:/lib/myhelp.chm" "About")
  3. Команда: (defun c:example()(getpoint "Есть время на F1"))
  4. C:EXAMPLE
  5. Команда: example
  6. Есть время на F1 (1540.12 1359.01 0.0)
и здесь появляется нужная справка - то есть вызов работает
з.ы. Андрей - убери все лишнее.
з.з.ы да если выбрать другой топик - тоже работает корректно.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
з.ы. Андрей - убери все лишнее.
Во первых: я не знаю F# и ты об этом в курсе, так что подправить твой код я не смогу. Полагаю, что смогу вставить твой текущий код в новый проект и собрать его лишь под AutoCAD 2009-2012.

Во вторых: твой код не будет работать в AutoCAD версий более новых, чем 2012, поскольку начиная с 2013-й функция acedSetFunHelp определена не в "acad.exe", но в "accore.dll". Кроме того, начиная с 2015-го версия x86 этой функции будет иметь имя "_acedSetFunHelp".

В третьих: А.Н. Ривилис обозначил границу песочницы, в рамках которой он "играется": AutoCAD версий 2013-2015. В противном случае вопросы группой ADN будут не глядя пересылаться в "лигу защиты сексуальных меньшинств" (т.е. в американский госдеп.).

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
так что подправить твой код я не смогу...
твой код не будет работать в AutoCAD версий более новых
Я как-бы намекал, что вызов работает, "подреж" свой код как раз таки на "новые версии" и пр. - может ошибка там.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Отлично. Теперь есть что отсылать в ADN DevHelp.
Запускал ваш ARX в AutoCAD 2013-м x86 с правами администратора - результат аналогичен описанному мною для запуска из под обычного юзера.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
И чтоб окончательно все запутать, я таки написал helloword в виде лисп функции (ихмо так проверять гораздо удобней):
На вкус и цвет все фломастеры разные - мне так не удобней.
и здесь появляется нужная справка - то есть вызов работает
з.ы. Андрей - убери все лишнее.
з.з.ы да если выбрать другой топик - тоже работает корректно.
Подправил твой код так, чтобы он заработал под AutoCAD 2015 x86 (заменил acad.exe на accore.dll и переименовал acedSetFunHelp на _acedSetFunHelp):
module dimas_help_sample

open Autodesk.AutoCAD.ApplicationServices
open Autodesk.AutoCAD.Runtime
open Autodesk.AutoCAD.DatabaseServices
open Autodesk.AutoCAD.EditorInput
open System.Runtime.InteropServices
[<DllImport("accore.dll",CallingConvention=CallingConvention.Cdecl,
            CharSet=CharSet.Auto)>] extern int _acedSetFunHelp(string,string,string)
let Rb=function
  |null->[]
  |(rb:ResultBuffer)->rb.AsArray()|>Array.toList
let (|AcStr|_|) (x:TypedValue)=
  match enum<LispDataType>(x.TypeCode|>int) with
    |LispDataType.Text->x.Value:?>string|>Some
    |_->None
[<LispFunction "TestHelp">]
let TestHelp arg=arg|>Rb|>function
  |[AcStr fname;AcStr path;AcStr topic]->_acedSetFunHelp(fname,path,topic)|>ignore
  |_->"Ошибка аргумента - (testhelp имя_функции путь глава)"
         |>Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage
Результат показан во вложенном файле, как видишь - у меня твой вариант пытается открыть родную справку автокада из инета.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Хм. А в 2009-ом работает?
з.ы. Я не уверен, да и 2015 у меня нет, а точно acedSetFunHelp не скомпилирует (нужен именно _acedSetFunHelp) ? Проверь - если не сложно.