TryEnterCriticalSection' : is not a member of '`global names
От: overt Ниоткуда  
Дата: 11.09.08 07:07
Оценка:
Такая проблема: отдельный модуль собирается в DEBUG & RELEASE в *.lib файлы. Тестовый пример также собирается в обеих конфигурациях. Тестовый пример использует библиотеку ACE и еще одну XYZ, выполненную на заказ, которая также использует ACE.

Далее, подключаю и использую в целевом проекте ABC библиотеки ACE и XYZ абсолютно аналогично тому, как это сделано в тестовом примере. Но ABC собирается только в DEBUG, в RELEASE случается ошибка:

D:\SVN\ACE_wrappers\ace/OS_NS_Thread.inl(3634) : error C2039: 'TryEnterCriticalSection' : is not a member of '`global namespace''


Причина, которую обнаружил — не дейфайнится _WIN32_WINNT, хотя в

d:\svn\ace_wrappers\ace\config-win32-common.h

есть код
#if !defined (_WIN32_WINNT)
# define _WIN32_WINNT 0x0400
#endif

который включается и в DEBUG, и в RELEASE сборках.

RELEASE собирается, если включаю дополнительно
# define _WIN32_WINNT 0x0400

в *.h, где использую ACE и XYZ, но такое лечение рассматриваю только как крайний случай.

Выслушаю любые предположения.
Спасибо.
(MS VS 7.1/8.0)
Re: TryEnterCriticalSection' : is not a member of '`global n
От: Сергей Мухин Россия  
Дата: 11.09.08 07:31
Оценка: +1
который включается и в DEBUG, и в RELEASE сборках.

O>RELEASE собирается, если включаю дополнительно

O>
O># define _WIN32_WINNT 0x0400
O>

O>в *.h, где использую ACE и XYZ, но такое лечение рассматриваю только как крайний случай.

ну почему крайний?

вот из MSDN

To compile an application that uses this function, define _WIN32_WINNT as 0x0400 or later. For more information


так что формально ты обязан ставить 0x4000 или выше.

а так можно конечно GetProcAddress и тп
---
С уважением,
Сергей Мухин
Re: TryEnterCriticalSection' : is not a member of '`global n
От: overt Ниоткуда  
Дата: 11.09.08 08:07
Оценка:
Разобрался. Нужно было подключать ACE до windows.h, чтобы определенное в нем _WIN32_WINNT возымело действие на windows.h, помоему так
(MS VS 7.1/8.0)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.