ARX приложение для Автокада 2016 x64 под Windows 8.1.

Автор Тема: ARX приложение для Автокада 2016 x64 под Windows 8.1.  (Прочитано 23001 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Ну вот, предположительно нашел неточность в коде. Привожу с необходимыми комментариями код функции, которая вызывает дочерний диалог.

Код - C++ [Выбрать]
  1. void CMainDlg::OnBnClickedDictionary()
  2. {
  3.    //Скрываем главный диалог, переходя в редактор Автокада.
  4.    BeginEditorCommand();
  5.  
  6.    //Переопределяем ресурсы.
  7.    CAcModuleResourceOverride resOverride;
  8.    
  9.    //Создаем и открываем дочерний диалог.
  10.    
  11.    //Этот код убран, так как из-за него скорее всего глючит
  12.    //программа в Автокад 2016 под Windows 8.1.
  13.    //Родительским окном здесь является мое главное окно.
  14.    //CRoomDefManagerDlg RoomDefDlg(this));
  15.    
  16.    //Этот код скорее всего будет работать, так как другой
  17.    //дочерний диалог создается именно этим способом.
  18.    //Родительским окном здесь является окно АВтокада.
  19.    CRoomDefManagerDlg RoomDefDlg(CWnd::FromHandle(adsw_acadMainWnd()));
  20.    
  21.    INT_PTR nResult = RoomDefDlg.DoModal();
  22.    
  23.    //Если вышли из дочернего диалога через OK, то выходим из главного диалога.
  24.    if(nResult == IDOK)   this->OnOK();
  25.    //Иначе уходим обратно в главный диалог.
  26.    else
  27.    {
  28.       //Завершаем работу в редакторе Автокада.
  29.       CompleteEditorCommand();
  30.  
  31.       //Активизируем подсказки в главном диалоге. Если это не сделать,
  32.       //то подсказки к элементам диалога в главном диалоге работать не будут.
  33.       m_ToolTip.Activate(TRUE);
  34.       //Устанавливаем фокус на нужный элемент в главном диалоге.
  35.       m_cbRoomNames.SetFocus();
  36.    }
  37. }

В старой версии (строка 14) для дочернего диалога родительским окном был мой главный диалог.
В новой версии (строка 19) для дочернего окна родительским окном стало окно Автокада.
В новом варианте фактически дочернее окно дочерним окном не является. Программа переключается в редактор Автокада и из редактора Автокада вызывает новый диалог.
Из моих опытов с CAcModuleResourceOverride получается, что перед каждым вызовом диалогового окна надо пользоваться этим классом. В моих диалогах есть такая штука, как подсказки к элементам - ToolTip. Подсказки используют строки через ресурсы. Если ресуcры не переопределять каждый раз, то подсказки не работают. Путаницы при этом не происходит. Когда уничтожается объект класса CAcModuleResourceOverride, контекст ресурсов возвращается на предыдущий уровень. Проверил все тщательно.
Теперь остается только отправить новую версию пользователю, чтобы, надеюсь, подтвердить мои предположения.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну вот, предположительно нашел неточность в коде. Привожу с необходимыми комментариями код функции, которая вызывает дочерний диалог.
Надеюсь для компиляции используется VS 2012 SP4 и Platform Toolset = v110
На эту мысль меня натолкнула необходимость использования CWnd::FromHandle(adsw_acadMainWnd()). Обычно это встречается в случае совмещения различных версий MFC (у AutoCAD одна версия, у arx-приложения другая).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Надеюсь для компиляции используется VS 2012 SP4 и Platform Toolset = v110
Именно это и используется.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще обратил внимание (глядя на исходный код), что не во всех случаях для BeginEditorCommand отрабатывает парный CompleteEditorCommand(), что неправильно. Кроме того восстановление ресурсов (деструктор resOverride) срабатывает уже после CompleteEditorCommand()
Я бы наверное поступил так:

Код - C++ [Выбрать]
  1. INT_PTR nResult = IDOK;
  2. BeginEditorCommand();
  3. {
  4.    CAcModuleResourceOverride resOverride;
  5.    CRoomDefManagerDlg RoomDefDlg(CWnd::FromHandle(adsw_acadMainWnd()));
  6.    nResult = RoomDefDlg.DoModal();
  7. }  
  8. CompleteEditorCommand();
  9. // А здесь уже идёт анализ nResult и соответствующие действия
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Можно и так, как Вы предлагаете. Но работает и мой вариант.

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Произведенные мной в коде исправления никак не повлияли на программу. Буду дальше решать проблему.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
С такими темпами к Новому Году... :)
Если к Новому году поспею, то это будет очень быстро. Поспешность известно к чему приводит :).

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Пришла информация от пользователей, что под Windows 10 и Автокад 2016 x64 программа тоже вылетает. Так что проблема заключена в сочетании Автокада и операционной системы. Придется ставить каким-нибудь способом новые винды и отлаживать.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
каким-нибудь способом
выше я обозначал "способ".

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
выше я обозначал "способ".
Способ безусловно хорош, но... используемая Вами конфигурация системы:
Цитировать
процессор Core i7
объём оперативной памяти - 24 Gb
пять жёстких дисков по 1Tb каждый, из них три внешних (для виртуальных машинок целиком отведён один из дисков, а для резервного копирования - ещё один)
видеокарта NVIDIA GeForce GTX 570
в наше кризисное время далеко не всем по-карману. Рискну предположить, что если у человека нет возможности поставить лицензионный 8.1, то и с покупкой такого железа могут быть тоже сложности... материального характера.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Всё это было ДО кризиса, конечно же...

По указанной ссылке была обозначена конфигурация десктопной машинки (в то время цены на железо ещё были относительно приемлемыми). Сейчас покупку аналогичной конфигурации я бы себе, пожалуй, позволить не смог. Но это не означает, что на менее мощных машинках это работать не будет. Будет, хотя и не так шустро, как возможно хотелось бы.

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

Однако, если ваша компания может позволить себе обновить ваш компьютер на более мощный, то это позволит вам на нём установить дополнительный набор виртуальных машинок (по потребности) и использовать их в дополнение к тем, которые уже крутятся на сервере.

Кроме того, всегда существует возможность из дома удалённо (по RDP) работать как с вашим физ. компьютером, находящимся в офисе, так и непосредственно с виртуальными машинками, крутящимися на сервере. Я время от времени так и поступаю: сидя за слабым нотиком (например, когда не хочу включать основной комп) дома я вполне комфортно работаю, т.к. все вычисления производятся на сервере, а мой нотик работает в качестве терминала (тут всё упирается в скорость передачи данных по сети, а с этим, как правило проблем нет).

Дома у меня имеется обычный, среднестатистический (как мне кажется) нотик ASUS K551L (почти разбитый в хлам). На нём так же установлено несколько виртуальных машинок. Не скажу что всё "просто летает" (подтормаживает, конечно же), но работать можно. Одновременно более двух виртуальных машинок на нём не запускаю; как правило довольствуюсь вообще одной, т.к. IDE установлена непосредственно на нотике, а виртуальные машинки - исключительно для тестирования и отладки посредством удалённого подключения. Однако, как я уже писал выше - чаще всего нотик я использую для подключения к серверным виртуальным машинкам, работающем в офисе (тогда всё работает шустро).

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Однако, как я уже писал выше - чаще всего нотик я использую для подключения к серверным виртуальным машинкам, работающем в офисе (тогда всё работает шустро).
Ловко у Вас всё устроено! Но боюсь, судя по завлениям автора топика:
Среда мне пока неизвестная - Windows 8.1...
и
Windows 8 под рукой нет и не предвидится в ближайшее время...
можно сделать предварительный вывод, что у человека нет возможности организовать своё рабочее место подобным образом.
В этой связи я бы посоветовал автору просто обновить свой Win 7 на Win 10, что называется free (если конечно мы говорим о лицензионном софте), благо такая возможность сейчас есть.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
можно сделать предварительный вывод, что у человека нет возможности организовать своё рабочее место подобным образом.
Или он пока не общался с IT-шниками на эту тему. Заодно не плохо было бы попытаться поговорить с руководством об оформлении подписки MSDN. Насколько я помню, два года стоят 60 т.р. Многие компании могу себе это позволить. Подписка предоставляет доступ почти ко всем продуктам Майкрософт и ключи к ним. Всё это можно использовать для разработки и тестирования (в итоге выходит дешевле, чем всё покупать по отдельности). Я именно этим и пользуюсь. А vmware сейчас используется практически в каждом IT-отделе, со всеми вытекающими...