Как создать Win32 DLL без MSVCR90D.dll? - PullRequest
2 голосов
/ 13 мая 2009

Я пытаюсь воссоздать существующую C Win32 DLL с помощью одной простой функции. Мне удалось сделать это с помощью VS C ++ 2008 Express, и моя новая DLL работает на моем компьютере с Vista и на компьютере с клиентом XP. Тем не менее, это не работает на других сайтах. Я проверил зависимости, и моя DLL требует MSVCR90D.dll и KERNEL32.dll, где исходная DLL требует только KERNEL32.dll.

Что такое MSVCR90D.dll и как мне создать простую Win32 DLL без этой зависимости?

Ответы [ 5 ]

8 голосов
/ 13 мая 2009

D в конце MSVCR90D.dll показывает, что вы скомпилировали .exe в режиме отладки. Вы должны распространять свое приложение только в режиме релиза.

Вы можете убедиться, что у них есть все необходимое, установив распространяемый пакет Microsoft Visual C ++ 2008 x86 или x64 . В противном случае вы можете просто скопировать нужные им файлы, найдя их на своем компьютере (сначала проверьте в% systemroot% \ system32)

См. эту ссылку MSDN .

3 голосов
/ 13 мая 2009

«D» в названии означает отладку. Это четкий индикатор отладочной сборки Visual Studio. Используйте сборку Release, и все будет хорошо.

Если целевая система еще не имеет среды выполнения C, вам, как правило, следует использовать официальный установщик для ее установки. Вот некоторые из версий среды выполнения, о которых вы, возможно, захотите узнать:

Вы также можете разработать полный установочный пакет, который включает в себя распространяемые библиотеки DLL (но никогда отладочная DLL), необходимые вашему приложению, и выполняет установку параллельных (SxS) сборок в кэш системных сборок. правильно, используя технику, известную как модули слияния. Этот подход проще, если у вас установлена ​​полная версия Visual Studio (не бесплатная версия VS Express), но итоговые установочные пакеты по-прежнему могут вообще не справляться с установкой среды выполнения на более старых (таких как Win 2K или 9x) платформах.

В статье MSDN Перераспределение файлов Visual C ++ описывается, каковы правила и как их легко соблюдать. Он служит отправной точкой для получения дополнительной информации о многих проблемах, связанных с развертыванием.

Если исходная библиотека DLL, функциональность которой вы заменяете, не имела ссылки на MSVCR90.DLL, то она должна быть статически связана со средой выполнения. Возможно, вам следует проверить предположения предполагаемого приложения, которое будет вызывать вашу DLL. Смешивание библиотек времени выполнения C в одном процессе не всегда легко. Если хостинговое приложение уже использует MSVCR90.DLL, то вам тоже стоит это сделать. Однако это более серьезная проблема, чем подходит для ответа на конкретный вопрос, поэтому я рекомендую вам изучить ее и задавать новые вопросы по мере необходимости.

Еще один подход, позволяющий избежать установки более поздних DLL-библиотек времени выполнения, - это ссылка на MSVCRT.DLL, которая распространяется с современными версиями Windows в качестве системного компонента. Это среда выполнения, которая была поставлена ​​с Visual C 6.0, слегка обновлена ​​для критических проблем и постоянно обновлялась, чтобы соответствовать ОС. Он вообще недоступен для 64-битных сборок, и довольно трудно обмануть Visual Studio, чтобы использовать его вместо более новой среды выполнения.

2 голосов
/ 13 мая 2009

Ссылка на статическую версию библиотеки времени выполнения C. Параметр находится в разделе «Генерация кода» в свойствах проекта. Тогда вам вообще не нужно будет беспокоиться о библиотеках MSVCR *.

0 голосов
/ 04 октября 2009

Скорее всего, вам нужно создать версию DLL вашей версии, протестировать ее и распространить вместо сборки Debug, которую вы распространяете сейчас.

Однако можно создать отладочную DLL, которая зависит от MSVCR90.DLL, не отладочной версии этой DLL. Для этого (VS 2008 SP1, инструкции аналогичны для других VS):

  1. Перейдите в Свойства проекта (щелкните правой кнопкой мыши проект на панели Обозреватель решений, выберите Свойства из меню).
  2. Перейдите в Свойства конфигурации \ C / C ++ \ Генерация кода.
  3. В Runtime Library у вас, вероятно, выбрана «Многопоточная отладочная DLL». Измените это на «Многопоточная DLL».

Вам придется все перекомпилировать, но теперь вы должны связываться с не отладочными библиотеками VS.

0 голосов
/ 13 мая 2009

Проверьте, установлена ​​ли на компьютере вашего клиента среда выполнения 2008 или нет. Если нет, вы можете либо установить его в своей системе, либо статически скомпилировать среду выполнения с вашим приложением.

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