Такая проблема: отдельный модуль собирается в 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, но такое лечение рассматриваю только как крайний случай.
Выслушаю любые предположения.
Спасибо.
который включается и в 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 и тп
Разобрался. Нужно было подключать ACE до windows.h, чтобы определенное в нем _WIN32_WINNT возымело действие на windows.h, помоему так