У меня Visual Studio 2012 с обновлением 5 для Windows 10. Я писал несколько программ, которые также можно запускать в Windows XP. Я искал несколько статей о том, как скомпилировать программу, использующую MFC, в статической библиотеке, и она действительно может работать, но поскольку я писал несколько программ в программном обеспечении, и я хочу использовать MFC в общей dll. Хотя мне удается выполнить компиляцию с помощью MFC в общей dll, программа не может работать в XP и появляется сообщение об ошибке: «точка входа процедуры InitializeCriticalSectionEx не может быть расположена в динамической библиотеке KERNEL32.dll».
Простите. Я неправильно написал функцию. Это функция InitializeCriticalSectionEx, и XP ее не поддерживают. Я не знаю, как решить эту проблему при использовании MFC в общей DLL.
Я попытался найти код, но не смог найти, где его использует MFC. Однако я нашел, где его использует ATL ... и IDK при использовании CString может привести к его включению. Однако, если вы #define NTDDI_VERSION NTDDI_WINXPSP2 или #define _ATL_XP_TARGETING, вы сможете решить эту проблему.
Похоже, вы пытаетесь использовать набор инструментов для нацеливания на XP неподдерживаемым способом. Среди прочего, набор инструментов требует использования Windows SDK 7.1. Он также определяет символ препроцессора _USING_V110_SDK71_
, затеняя код, который пытается вызвать InitializeCriticalSectionEx
. Если вы хотите использовать более свежий SDK, вы останетесь без официальной поддержки. См. Как настроить таргетинг на XP с VC2012 или VC2013 и продолжить использование Windows 8.x SDK для получения дополнительной информации.
Вроде бы надо было скомпилировать статическим MFC.
Это интересно, потому что MSDN прямо говорит, что эта функция поддерживается в XP: msdn.microsoft.com/en-us/library/windows/desktop/… У вас есть клиенты, которым нужна XP? Microsoft больше не поддерживает это.