Проблема с использованием Visual Studio 2010 скомпилированной библиотеки C++ DLL в Windows 2000
У меня есть очень простая DLL, написанная на неуправляемом C++, к которому я обращаюсь из своего приложения. Недавно я переключился на Visual Studio 2010, и DLL изменилась с 55 КБ до 35 КБ без изменений кода, и теперь она больше не будет загружаться в Windows 2000. Я не изменил никакого кода или настроек компилятора. У меня есть настройки для 0x0500, которые должны включать поддержку Windows 2000. Кто-нибудь еще сталкивался с этим, или есть какие-либо идеи о том, что я могу сделать?
2 ответа
Visual Studio 2010 не может создавать двоичные файлы, работающие в Windows 2000. На самом деле это даже хуже, они не будут работать на Windows XP RTM или Windows XP Service Pack 1. Это связано с тем, что для библиотеки времени исполнения C VS2010 требуется API-интерфейс EncodePointer, который недоступен до SP2.
Похоже, вы застряли с установкой VS2008, если хотите поддерживать более ранние версии Windows. Вы можете либо переместить весь свой проект в Visual Studio 2008, либо использовать целевой набор инструментов vc90 (Visual Studio 2008) из своих проектов Visual Studio 2010. Для получения более подробной информации о последнем методе, смотрите этот ответ на мой связанный вопрос здесь.
Решение, вероятно, состоит в том, чтобы предоставить EncodePointer (и DecodePointer, очевидно) в отдельной библиотеке и связать ее преимущественно с KERNEL32.LIB. Это прекрасно поддерживаемый сценарий. В прошлом библиотеки типа "LIBCTINY" и "UNICOWS" использовали этот механизм преференциальных ссылок для добавления / замены выбранных, но не всех функций из другой библиотеки.