Подтвердить что ты не робот

Проблема с использованием скомпилированной С++ DLL Visual Studio 2010 в Windows 2000

У меня очень простая DLL, написанная на неуправляемом С++, доступ к которой я получаю из своего приложения. Недавно я переключился на Visual Studio 2010, а DLL перешел от 55k до 35k без изменений кода, и теперь он больше не будет загружаться в Windows 2000. Я не изменял никаких настроек кода или компилятора. У меня есть настройка для 0x0500, которая должна включать поддержку Windows 2000. Кто-нибудь еще сталкивается с этим или имеет какие-либо идеи о том, что я могу сделать?

4b9b3361

Ответ 1

Visual Studio 2010 не может создавать двоичные файлы, которые запускаются в Windows 2000. На самом деле это даже хуже, чем они не будут запускаться в Windows XP RTM или Windows XP с пакетом обновления 1 либо. Это связано с тем, что для библиотеки времени выполнения VS2010 C требуется API EncodePointer, который недоступен до SP2.

Похоже, вы застряли в строительстве с установкой VS2008, если хотите поддерживать более ранние версии Windows. Вы можете либо переместить весь проект в Visual Studio 2008, либо настроить таргетинг на набор инструментов vc90 (Visual Studio 2008) из ваших проектов Visual Studio 2010. Более подробную информацию о последнем методе см. В этом ответе на мой вопрос здесь.

Ответ 2

Возможно, решение состоит в том, чтобы обеспечить EncodePointer (и DecodePointer, очевидно) в отдельной библиотеке и ссылку, которая предпочтительнее для KERNEL32.LIB. Это полностью поддерживаемый сценарий. Раньше библиотеки, такие как "LIBCTINY" и "UNICOWS", использовали этот предпочтительный механизм ссылок для добавления/замены выбранных, но не всех функций из другой библиотеки.