Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Debalance от 31-01-2020, 23:50:30

Название: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 31-01-2020, 23:50:30
Одно из своих проверенных приложений потребовалось загрузить на машине с Windows XP (x86) под AutoCAD 2012. И оказалось, что этого невозможно осуществить. Вот такая картина при ближайшем рассмотрении:

(https://live.staticflickr.com/65535/49469386968_e3d0472983_o.png)

Две загадочные библиотеки (IESHIMS.DLL и WER.DLL) напрочь отсутствуют в WinXP Более того вебсёрчинг показал, что появляются они только в Висте. Что делать - непонятно. Тупое добавление этих библиотек ни к чему не приводит.

Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 31-01-2020, 23:54:52
Если это твое приложение - перекомпилируй его под XP. Ответ очевиден. У меня подозрение, что ты используешь стороннюю библиотеку, несовместимую с Windows XP.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 10:40:07
... перекомпилируй его под XP
Попробую. Только где гарантии, что сей модуль будет корректно работать, положим на Vista и Win 7? Или для каждой ОС надо создавать свой модуль?

У меня подозрение, что ты используешь стороннюю библиотеку
Судя по анализу с Dependency Walker на эти два файла ссылаются библиотеки подкрашенные красным:
(https://live.staticflickr.com/65535/49471607916_29a9cb0641_o.png)
которые в свою очередь принадлежат самой Windows. Вот такая великолепная фигня...
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 13:12:04
Только где гарантии, что сей модуль будет корректно работать, положим на Vista и Win 7?
Гарантий никто не даст, но тем не менее обычно есть преемственность от старых к новым, а не наоборот.
Судя по анализу с Dependency Walker на эти два файла ссылаются библиотеки подкрашенные красным:
Честно говоря я совсем не уверен, что проблема с тем, что твой arx не грузится на XP, связана с отсутствующими библиотеками.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 15:02:25
Попробуй установить (в stdafx.h):

Код - C++ [Выбрать]
  1. #define WINVER 0x0400
  2. #define _WIN32_WINNT 0x0400
  3. #define _WIN32_WINDOWS 0x0410  
  4. #define _WIN32_IE 0x0400
      
И перестрой проект с этими значениями. Похоже у тебя цеплялись слишком "свежие" для Windows XP настройки.
Ну и VS 2008 (Platform Toolset = v90)
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 20:52:16
Попробуй установить (в stdafx.h):

Код - C++ [Выбрать]
  1. #define WINVER 0x0400
  2. #define _WIN32_WINNT 0x0400
  3. #define _WIN32_WINDOWS 0x0410  
  4. #define _WIN32_IE 0x0400
      

С такими настройка не компилируется. Компилятор требует минимум 0x0501.
Поэтому сделал так:
Код - C++ [Выбрать]
  1. #define WINVER 0x0501
  2. #define _WIN32_WINNT 0x0501
  3. #define _WIN32_WINDOWS 0x0410  
  4. #define _WIN32_IE 0x0600

Результат тот же - не грузится.

Ну и VS 2008 (Platform Toolset = v90)
Это - аксиома.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 20:55:19
С такими настройка не компилируется. Компилятор требует минимум 0x0501.
У меня компилируется. Эти настройки выставляет ObjectARX Wizard 2012. Кстати, можешь просто создать с его помощью проект и добавить в него свои cpp- и h-файлы.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 20:59:57
У меня компилируется
У меня в проекте задействован WTL - он-то и требует. Можно попробовать сделать ему даунгрейд.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 21:08:02
У меня в проекте задействован WTL
С этого и нужно было начинать. Посмотри совместимость с Windows XP её версий.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 21:13:31
С этого и нужно было начинать. Посмотри совместимость с Windows XP её версий.
Ну так 0x0501 это же и есть XP! Или нет?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 21:22:49
Ну так 0x0501 это же и есть XP! Или нет?
Я не про WINVER, а про WTL. Думаю, что только те настройки, которые создаёт ObjectARX Wizard однозначно совместимы с Windows XP.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 21:32:36
Думаю, что только те настройки, которые создаёт ObjectARX Wizard однозначно совместимы с Windows XP.
Жёстко Вы рубите. Судя по WINVER этот проект будет совместим с Windows NT... только AutoCAD 2012 не станет на эту платформу.
Хорошо, если я соберу проект на машине с XP с прежними настройками он будет работать? Или это ничего не даст?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 21:34:17
Или это ничего не даст?
Думаю, что это ничего не даст. От машины, на которой происходит сборка ничего не зависит. Зависит от настройки проекта и библиотек, с которыми идёт линковка.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 22:19:57
В общем сделал даунгрейд WTL - компилятор стал проглатывать, но стал плеваться на бустовые заголовки... замкнутый круг.  Похоже придётся забивать на поддержку XP - слишком много "НО".
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 22:23:55
В общем сделал даунгрейд WTL - компилятор стал проглатывать, но стал плеваться на бустовые заголовки...
А если при этой версии WTL поставить WINVER 0x0501 ?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 22:29:50
А если при этой версии WTL поставить WINVER 0x0501
Пробовал, компилятор в этой связке даже съедает _WIN32_IE 0x0400 - но толку нет, не грузится приложение.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 22:49:24
Кстати, открыл проект ProtocolReactors_dg из ObjectARX 2010, там такие настройки с рекомендациями на возможное их изменение:

Код - C++ [Выбрать]
  1. #ifndef WINVER                          // Allow use of features specific to Windows 95 and Windows NT 4 or later.
  2. #define WINVER 0x0500           // Change this to the appropriate value to target Windows 2000 or later.
  3. #endif
  4.  
  5. #ifndef _WIN32_WINNT            // Allow use of features specific to Windows NT 4 or later.
  6. #define _WIN32_WINNT 0x0400     // Change this to the appropriate value to target Windows 2000 or later.
  7. #endif                                         
  8.  
  9. #ifndef _WIN32_WINDOWS          // Allow use of features specific to Windows 98 or later.
  10. #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
  11. #endif
  12.  
  13. #ifndef _WIN32_IE                       // Allow use of features specific to IE 4.0 or later.
  14. #define _WIN32_IE 0x0400        // Change this to the appropriate value to target IE 5.0 or later.
  15. #endif

Т.е. менять всё-таки можно?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 22:51:40
Т.е. менять всё-таки можно?
Менять можно, но осторожно. Впрочем, я до сих пор не уверен, что проблема в тех двух библиотеках, которые не находит dependency walker.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 22:53:51
P.S.: Я правильно понимаю, что этот же arx-файл нормально грузится в AutoCAD 2012 в Windows Vista/7 x86?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 22:57:39
P.S.: Я правильно понимаю, что этот же arx-файл нормально грузится в AutoCAD 2012 в Windows Vista/7 x86?
В Висте не знаю - нет возможности проверить самому. Win7 x86/x64 и выше всё работает.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 23:02:50
Интересно посмотреть на результаты:
dumpbin.exe /imports test.arx
dumpbin.exe /exports test.arx
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 23:20:06
Интересно посмотреть на результаты:
Приложил результаты.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 23:27:08
Насколько я помню, acrxEntryPoint и acrxGetApiVersion должны быть в начале в списке экспорта. У тебя есть def-файл такого содержания:
EXPORTS
        acrxEntryPoint          PRIVATE
        acrxGetApiVersion       PRIVATE
?
И кроме того мне непонятно откуда взялась библиотека UxTheme.dll
Ты её используешь?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 23:40:36
У тебя есть def-файл
Нет. У меня в stdafx.h реализовано так:

Код - C++ [Выбрать]
  1. #ifdef _M_X64
  2. #pragma comment(linker, "/export:acrxGetApiVersion,PRIVATE")
  3. #pragma comment(linker, "/export:acrxEntryPoint,PRIVATE")
  4. #else
  5. #pragma comment(linker, "/export:_acrxGetApiVersion,PRIVATE")
  6. #pragma comment(linker, "/export:_acrxEntryPoint,PRIVATE")
  7. #endif

И кроме того мне непонятно откуда взялась библиотека UxTheme.dll
Ты её используешь?
Явно - нет. Честно говоря не знаю что это.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 23:41:38
Нет. У меня в stdafx.h реализовано так:
Попробуй сделать как я сказал с def-файлом.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 01-02-2020, 23:46:30
И кроме того мне непонятно откуда взялась библиотека UxTheme.dll
Ты её используешь?
Да - понял что это! Использую. Но это библиотека не на что не влияет. Я пробовал грузить в XP схожий облегченный проект (там её нет) - та же фигня.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 01-02-2020, 23:47:56
Я пробовал грузить в XP схожий облегченный проект (там её нет) - та же фигня.
А если ты создаёшь простой проект при помощи ObjectARX Wizard - он грузится?
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 02-02-2020, 00:29:51
Попробуй сделать как я сказал с def-файлом.
Создал. Убил свои строчки, добавил *.def. Ничего не изменилось. Похоже файл exports такой же и остался.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 02-02-2020, 00:30:31
А если ты создаёшь простой проект при помощи ObjectARX Wizard - он грузится?
Создал пустой проект в Визарде - грузится норм.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 02-02-2020, 00:55:33
Если ты в этот проект добавляешь свои файлы? Если и это не поможет - я пас. Идеи закончились.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 02-02-2020, 01:28:53
Попробуй сделать как я сказал с def-файлом.
Создал. Убил свои строчки, добавил *.def. Ничего не изменилось. Похоже файл exports такой же и остался.
Наверное тогда так:
EXPORTS
  acrxEntryPoint    @1  PRIVATE
  acrxGetApiVersion @2  PRIVATE
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 03-02-2020, 22:23:23
Походу я локализовал проблему. Суть в следующем: в своём приложении вместо классических MessageBox'ов я использовал более новомодные TaskDialog (https://www.codeproject.com/Articles/16806/Vista-Goodies-in-C-Using-TaskDialogIndirect-to-Bui)'и. А последние появились только в Vista. TaskDialog требует comctl32.dll с бОльшим функционалом, которого нет в XP. Поэтому Dependency Walker не врал.

Наверное тогда так:
Опыт показал, что очерёдность не имеет значения.



Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Debalance от 03-02-2020, 22:31:41
А вот интересно, существует ли какой-нибудь Redistributable Package с данным функционалом, который можно безболезненно и легально "залить" в XP.
Название: Re: Проблема с загрузкой приложения в Windows XP
Отправлено: Александр Ривилис от 03-02-2020, 23:10:53
А вот интересно, существует ли какой-нибудь Redistributable Package с данным функционалом, который можно безболезненно и легально "залить" в XP.
Это врядли. А вот сделать так, чтобы твоё приложение всё-таки грузилось в XP можно при помощи /DELAYLOAD. Ну и в коде проверить версию Windows и для XP использовать MessageBox.