2016-04-18 8 views
0

Когда вы ссылаетесь на MS Visual C Runtime Library из вашей (C++) программы, вы обычно связываете только одну версию, версию выпуска или отладки: либо MSVCR<ver>.dll, либо MSVCR<ver>D.dll или with VS2015ucrtbase[D].dll s и их дополнительные зависимости.Загружает как выпускную, так и отладочную версию MSVCR (или UCRT и т. Д.), Официально поддерживаемую MS?

Отказ от ответственности: Смешение их использование и обмена указателей (и т.д.) от одного к другому приведет к сбоям и безумия - это не, что этот вопрос о.

Однако, когда ваш C или C++ программа ссылки на 3-й партии (C) DLL, которая только поставляется в варианте выпуска, и что DLL использует MSVCR внутренне (!), Он будет ссылаться на и загрузить релиз версии, даже когда вы запускаете свою программу в отладочной версии. (Вариант этого состоит в том, что сторонняя библиотека могла бы, опять внутренне, также использовать совершенно другую версию MSVCR ###. Dll, чем вы, и в этом случае они будут отличаться даже в вашей версии релиза.

Это довольно стандартный сценарий для меня, и я всегда предполагал, что это «просто работает» (что действительно кажется делает).

Мне было интересно, действительно ли это ожидаемый и поддерживаемый сценарий для этих MS-библиотек? Есть ли у вас какие-либо впечатления об обратном?

+0

Адрес ссылки: https://social.msdn.microsoft.com/Forums/en-US/1fef65a6-17c8-47de-a3a9-7271c7e3d368/mfc-compatibility-different-mfc-versions-loaded-in-the- same-process? forum = vcgeneral –

ответ

1

Да, это поддерживается и распространено.

Например, если вы создаете приложение Windows Forms на C++/CLI, вы, вероятно, загрузите в процесс как минимум три разных CRT: ваша программа будет использовать msvcr.dll, CLR будет использовать msvcr120_clr0400.dll, и различные компоненты операционной системы, загруженные в ваш процесс, могут использовать msvcrt.dll.

+0

Спасибо Джеймсу за то, что сообщили нам! Я в порядке с этим ответом ... но возможно ли какое-либо конкретное упоминание об этом в документах MSDN? Приветствия. –

+0

Я недавно задавался вопросом о связанной теме: http://stackoverflow.com/questions/40178865/use-c-dlls-from-the-same-vs-compiled-at-different-times-teams-abi-compatibil –