Как я могу скомпилировать DLL, чтобы она работала с VS2005 / 2008/2010 - PullRequest
1 голос
/ 06 февраля 2011

У меня есть C ++ dll. Есть ли способ скомпилировать его так, чтобы он мог использоваться с VS2005 / 2008/2010 вместо того, чтобы мне приходилось делать 3 разные сборки?

Спасибо

Ответы [ 2 ]

3 голосов
/ 06 февраля 2011

Как правило, вы можете "использовать" C ++ dll с любой версией Visual Studio, если вы просто ссылаетесь на нее.

Однако, когда ваша dll скомпилирована, она будет нацелена на конкретную версию среды выполнения C ++, поэтому конечные пользователи вашей программы должны будут установить эту среду выполнения (распространяемый пакет Visual C ++) на свой ПК. Поэтому, если вы используете DLL, созданную VS2005, и исполняемый файл, созданный VS2010, ваш конечный пользователь должен будет установить распространяемые пакеты как 2005, так и 2010 года. То же самое обычно относится и к другим библиотекам, если вы их используете (MFC и т. Д.)

Если вы сделаете это, вам также нужно быть осторожным с распределением памяти - память, выделенная в одной версии времени выполнения, не может быть безопасно удалена другой. Так что все, что выделяет ваша dll, также должно быть освобождено dll, а все, что выделено вашим exe, не должно быть освобождено dll.

В результате большинство людей пересобирают dll с той же версией VS, в которой они собирают остальную часть своей программы, чтобы минимизировать проблемы совместимости - в конечном итоге гораздо проще встроить каждую версию VS, чем разбирать все вопросы, связанные с этим не делают.

(Подсказка: вы можете запустить VS из командной строки и заставить его построить проект / решение, так что это 5-минутная работа, чтобы написать пакетный скрипт, который автоматизирует сборку всех трех вариантов за один раз)

0 голосов
/ 06 февраля 2011

Используемая версия Visual Studio не имеет значения, можно ли ссылаться на данную сборку.

Единственное, что имеет значение, - это то, на какую версию фреймворка была скомпилирована сборка. В любом случае, если это сборка .net.

Несмотря на это, обычной практикой является предоставление версий, скомпилированных для каждого фреймворка rev (2.0, 3.5 и 4.0).

Тем не менее, если вы компилируете неуправляемую c ++ dll; затем просто предоставьте 32-битную и 64-битную версию этой библиотеки DLL. В этом случае используемая версия .net (и, соответственно, версия visual studio) является несущественной.

...