Проблема с помощью Visual Studio 2010 скомпилировала C++ DLL в Windows 2000

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

16
задан Jon Tackabury 19 April 2010 в 01:01
поделиться

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. Дополнительные сведения о последнем методе см. В этом ответе на мой связанный с этим вопрос здесь .

12
ответ дан 30 November 2019 в 22:37
поделиться

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

5
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: