Проблема с использованием Visual Studio 2010 скомпилированной библиотеки DLL C ++ в Windows 2000 - PullRequest
16 голосов
/ 19 апреля 2010

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

Ответы [ 2 ]

12 голосов
/ 19 апреля 2010

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. Для получения более подробной информации о последнем методе см. Этот ответ на мой связанный вопрос здесь .

5 голосов
/ 19 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...