Любые вопросы от ПРОФИ к СУПЕРПРОФИ - 1. - страница 11

 
joo:

Сделал так, всё равно та же ошибка:

Zhunko:

Проект был скопирован в VC++ 6.0 со своими свойствами или отдельно настраивался?

У меня уже раза три было, что использовал в VS 2010 функции, которых нет в ХР. На Висте и 7 работало всё, а под ХР терминал не видел библиотеку.

Zhunko:

В начале темы написал. Это бывает, если используются функции WinAPI, которых нет в ХР. Ещё одна причина. Если ограничена минимальная версия системы более высокой.

У меня сейчас тоже самое. Всё никак руки не дойдут поискать эту функцию.

 

Zhunko:

joo:

Сделал так, всё равно та же ошибка:

Zhunko:

Проект был скопирован в VC++ 6.0 со своими свойствами или отдельно настраивался?

У меня уже раза три было, что использовал в VS 2010 функции, которых нет в ХР. На Висте и 7 работало всё, а под ХР терминал не видел библиотеку.

Zhunko:

В начале темы написал. Это бывает, если используются функции WinAPI, которых нет в ХР. Ещё одна причина. Если ограничена минимальная версия системы более высокой.

У меня сейчас тоже самое. Всё никак руки не дойдут поискать эту функцию.

Нашёл у себя причину! Но, что с ней делать не знаю.

Проблема оказалась в этой конструкции метода класса со статическими методами:

    static HWND HandleByProcessIdAndClass()
     {
      HWND   hwndLocal = NULL; // Дескриптор искомого окна.
      size_t i = 0;

      ::EnterCriticalSection(&GetInstance()->csOne);
      ::EnterCriticalSection(&GetInstance()->csMultiple);
     ................. Здесь защищаемый код ...................
      ::LeaveCriticalSection(&GetInstance()->csMultiple);
      ::LeaveCriticalSection(&GetInstance()->csOne);
      return(hwndLocal);
     }

Стоит убрать синхронизацию (выделенное красным) - библиотека становиться видна для ХР. На Висте это работает.

Может быть дело в недостаточной версии какой-нибудь системной библиотеки?

=======

На счёт этого класса надо пояснить.

Все методы класса со статическими методами "Windows", а их около 80, имеют похожую синхронизацию.

Указанный метод вызывается первым в конструкторе экземпляра другого класса "WindowsMT4".

Похоже на то, что класс "Windows" инициализируется невовремя.

 

Нашёл причину. Андрей помог. Синглетоны неправильно сделал.

ХР и Виста по разному инициализируют классы. Нужны правильные синглетоны.

 
Zhunko:

Нашёл причину. Андрей помог. Синглетоны неправильно сделал.

ХР и Виста по разному инициализируют классы. Нужны правильные синглетоны.


Жесть-то какая. Просто ужасть!
 
C-4:

Жесть-то какая. Просто ужасть!
Да, ладно... :-)) Просто класс со статическими методами переделал в синглетон. Всё заработало.
 
Zhunko:
Да, ладно... :-)) Просто класс со статическими методами переделал в синглетон. Всё заработало.

Вопрос к суперпрофи в порядке обмена опытом:)) - а как ты удаляешь синглетон?

 
alsu:

Вопрос к суперпрофи в порядке обмена опытом:)) - а как ты удаляешь синглетон?

В смысле очистить ресурсы? В деструкторе можно.
 
Zhunko:
В смысле очистить ресурсы? В деструкторе можно.

Нет, в смысле самого удаления объекта - какая процедура решает, когда его удалять?

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

 
alsu:

Нет, в смысле самого удаления объекта - какая процедура решает, когда его удалять?

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

Синглетонам обучился недавно. Понял, что без них нельзя. Удалять не умею. Потребности не было.
 

alsu:

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

Если возникают проблемы с удалением синглтона, скорее всего он неверно используется. Хотя синглтоны тоже разные бывают, взять к примеру феникс.
Причина обращения: