Можно ли использовать dll C ++, скомпилированную с использованием Visual Studio 2008, с Visual Studio 2005? - PullRequest
3 голосов
/ 02 августа 2009

Я собираюсь работать с библиотекой C ++, написанной на простом C ++ (не .NET и без MFC). Библиотека доступна скомпилированной с использованием Visual Studio 2005 / Intel Fortran 9.1 и VS 2008 / Intel Fortran 10.1.

Очевидно, что я собираюсь взять двоичные файлы для VS 2008, так как это среда на моем компьютере, но мне любопытно, есть ли причины, по которым прямая библиотека C ++ не будет совместима между VS 2005 и 2008. Предположим, что искажение имени будет таким же, но, возможно, есть и другие причины. Я давно не пользовался С ++, поэтому немного устала от всего этого.

Ответы [ 3 ]

3 голосов
/ 03 августа 2009

Наверное, должно работать. Библиотека DLL, скомпилированная с VS 2005, будет зависеть от реализации стандартной библиотеки C 2005 года (msvcr80.dll), тогда как ваш код будет зависеть от библиотеки C 2008 года 2008 (msvcr90.dll). Это означает, что во время выполнения будут загружены обе версии библиотек C, и это нормально, но это увеличивает использование памяти и очень мало замедляет время загрузки.

3 голосов
/ 03 августа 2009

Как прокомментировали другие авторы, вы должны уметь работать таким образом.

Однако есть одна проблема, которая может быть серьезной, - управление памятью. В частности, время выполнения C ++ может быть сложным.

Самая большая проблема заключается в том, что существуют некоторые несовместимости между тем, как среды выполнения 2005 и 2008 годов управляют памятью. Все работает нормально, при условии, что вы всегда выделяете свою память в своей DLL-библиотеке VS2008 и всегда удаляете память, выделенную из нее внутри вашей DLL. Обычно для этого требуется создать в вашей DLL некоторые «дополнительные» методы фабрики и очистки и разоблачить их.

Если вы выделите память из своей библиотеки VS 2008, а затем удалите ее из кода, скомпилированного с использованием VS 2005, или наоборот, вы можете столкнуться с некоторыми очень трудными для отладки проблемами. Это часто работает, но имеет случайные сбои или нестабильности.

2 голосов
/ 03 августа 2009

Самая большая проблема, с которой вы столкнетесь, - это использование ЭЛТ. Если CRT (C RunTime) статически связан с DLL, у вас не должно быть никаких проблем.

Однако, если ЭЛТ динамически связана с проектом, у вас могут возникнуть проблемы. Visual Studio 2005 и 2008 используют разные версии CRT, и они не могут быть легко загружены вместе. Но если одна или обе библиотеки DLL статически связывают ЭЛТ, вы должны быть в приличной форме.

...