Развертывание библиотек DLL Visual C ++ как частных сборок - PullRequest
1 голос
/ 18 мая 2011

На этой странице приведены инструкции по развертыванию локальной копии библиотек VC ++ 2008 с вашим приложением, чтобы избежать необходимости установки стороннего vcredist.Это полезно для меня, потому что это позволило бы мне отправлять заархивированную папку пользователям, которых они могут запустить, без необходимости использовать установщик, который не нравится.

Но это не работает для меня.Мое приложение не использует MFC, только Win32 и в остальном стандарт C ++.У меня app/MyApp.exe и все ... какие файлы я должен копировать с %PROGDIR%\Microsoft Visual Studio 9.0\VC\Redist\x86 и куда именно они должны идти?

Я тестирую это на виртуальном ПК в режиме XP и когда я пытаюсьследуя инструкциям на странице, копирование файлов без изменений приводит к появлению ошибки «Не удалось инициализировать приложение».Есть ли какой-то шаг, который я пропускаю?

Я посмотрел свой манифест, и, как и ожидалось, используется только CRT: http://pastebin.com/BD4NZMC2

1 Ответ

0 голосов
/ 18 мая 2011

Самый простой способ обойти DLL-ад - это перекомпилировать ваше приложение с флагом компилятора / MT (вместо default / MD).Это будет статически связывать библиотеки времени выполнения C.Если это отдельный exe-файл, он всегда будет работать.

Если нет (то есть у вас есть свои собственные DLL), вы должны позаботиться о том, чтобы вы выделяли и освобождали память в одном и том же модуле - то есть, если вы используете malloc () часть памяти в исполняемом и свободном) тот же указатель в DLL, он потерпит крах - поскольку и исполняемый файл, и DLL получат свои собственные кучи, и попытка free () для несоответствующей кучи не будет работать.

...