C ++ DLL обратная совместимость с NO CLR

Я уже посмотрел на эти 2 ссылки из SF, но они мне не помогли:

https://stackoverflow.com/questions/21591649/c-dll-providing-backward-and-forward-compatibility-for-callers

.lib и .dll обратная совместимость

У меня есть проект C ++, и он не основан на CLR. Выходные данные представляют собой файл DLL. Прямо сейчас я нахожусь на Windows 8 и использую Visual Studio 2013, чтобы построить проект. Выходная DLL работает нормально на Windows 8. Но когда я помещаю ту же выходную DLL в окно 7, я получаю сообщение об ошибке «Missing DLL MSVCR120.DLL», я пытаюсь скопировать отсутствующую DLL в папку System32 в Windows 7, и пропадает ошибка DLL. далеко, но моя DLL все еще не работает. Только когда я создаю исходный код в Visual Studio 2010 на Windows 7, а затем использую его выходную DLL, он работает нормально. В Windows 7 установлена ​​распространяемая среда выполнения C ++ 2010. Я также пытался установить другие версии среды выполнения C ++, но безуспешно на Win 7.

Могу ли я не использовать только одну машину для разработки и одну визуальную студию для создания одной (или даже нескольких) C ++ DLL, которая будет работать в большинстве версий Windows, таких как Vista, 7, 8, Server 2008 и т. Д.? Прямо сейчас я должен собрать исходный код на каждой отдельной ОС со своей собственной VS.

PS: проект является реализацией Windows Credential Provider.

0

Решение

Обычно вам необходимо установить VS2013 распространяется бесплатно на всех машинах эта DLL используется.

Альтернативой может быть создание вашего проекта для связи со статическими библиотеками времени выполнения, но полученный исполняемый файл будет больше по размеру; больше деталей в этот так ответ.

0

Другие решения

Там может быть несколько причин, что вещи не работают, как ожидалось

  1. Ваша цель проекта может быть Windows 8 см. — Использование заголовков Windows. В основном, если dll скомпилирована для Windows 8, некоторые новые функциональные возможности Windows 8 разблокированы, но это означает, что предыдущие версии Windows не поддерживаются.
  2. C ++ Dlls не совместим с ABI между компиляторами, поэтому в зависимости от того, как реализована DLL, и от того, как отличается компилятор, он может работать или не работать. Я имею в виду, что когда приложение, использующее DLL, скомпилировано в VC 2010, а DLL скомпилировано в VC2013, приложение VS2010, возможно, не сможет загрузить dll VC2010. Увидеть Как: Экспортировать классы C ++ из DLL В качестве альтернативы вы можете сделать полный COM DLL.
  3. Твоя Dll зависит от какой-то другой DLL, которой нет, или правильной версии нет (т.е. новая функция была добавлена ​​в dll, которую ты используешь, но версия dll в системе не содержит эта функция). Откройте библиотеку DLL с помощью Dependency Walker на компьютере, с которым у вас возникли проблемы, чтобы показать отсутствующие библиотеки DLL.
  4. Относится к пункту 3. Установите vcredist 2013 в системе, которая не загружает DLL, также, если DLL является 64-битной, вам нужен 64-битный vcredist, или если dll 32-битная, вам нужен 32-битный vcredist.
  5. 64-битное приложение не может загрузить 32-битную DLL и наоборот.

У меня недостаточно репутации, чтобы публиковать более двух ссылок, поэтому ищите Dependency Walker

0

По вопросам рекламы [email protected]