Почему подключаемые модули 3ds Max необходимо создавать с определенной версией Visual C ++? - PullRequest
2 голосов
/ 19 января 2011

Требования, перечисленные в 3ds Max SDK, указывают, что подключаемые модули для 3ds Max 2011 должны быть собраны с помощью Visual C ++ 9.0 (Visual Studio 2008).

Если я создам DLL с другой версией Visual C ++, не будет ли двоичный файл идентичным? Это просто вопрос выбора правильных настроек компилятора?

С какими проблемами я столкнусь, если попытаюсь создать плагин с помощью Visual C ++ 2010 (Visual Studio 2010)?

Ответы [ 4 ]

1 голос
/ 19 января 2011

Я не знаю конкретно для 3ds Max, но обычной причиной является библиотека C Runtime.Если хост-приложение использует версию DLL CRT, тогда плагинам также нужно будет использовать ту же версию.

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

0 голосов
/ 06 октября 2011

C ++ не имеет стандартизированного двоичного интерфейса. Компилятор "искажает" каждое имя символа (то есть каждую функцию или статические данные), чтобы включить информацию о пространствах имен и сигнатуре, чтобы пространства имен, перегрузка аргументов и т. Д. может работать. Каждый компилятор может решить, как это сделать. В разных версиях компилятора MSVS искажение имен выполняется по-разному, поэтому в целом вы не можете связать библиотеку C ++, скомпилированную с 2005 года, и библиотеку, скомпилированную с 2008: это включает в себя загрузку библиотеки DLL 2008 из исполняемого файла 2005 (например). Это можно сделать, если интерфейс между библиотеками - C, если соответствующие функции помечены extern "C" для предотвращения искажения имени. И на практике различия не всегда так велики: например, у меня никогда не возникало проблем с использованием VS2005 SP1 для компиляции библиотеки для 3ds Max 9, которая предположительно требует VS2005 без пакета обновления.

Microsoft пытается исправить эту несовместимость, поэтому в VS2010 они представили опцию, поэтому VS2010 может создавать двоичные файлы, совместимые с программами VS2005 или VS2008 (возможно, некоторые более ранние версии тоже, я забыл). Если вам нужно создать плагин для работы с несколькими версиями 3ds Max, и вы не обнаружите никаких ошибок VS2010, это, вероятно, хороший вариант. Кроме того, у компилятора Intel C ++ есть режим, в котором он создает двоичные файлы, совместимые с версией MSVS по вашему выбору, что может быть лучшим вариантом для вас, если он используется для хобби или вы можете позволить себе немного дорогой ценник. (Они достигают этого, копируя способ, которым MSVS использует искажение имен.)

0 голосов
/ 20 января 2011

Я использую Visual Studio 2008 и 2010 для разработки плагинов. Единственное различие, которое я видел, заключается в том, что пользователю нужна версия среды выполнения c ++ для 2010 \ 2008.

Но могут быть подводные камни - но я с этим еще не сталкивался.

0 голосов
/ 20 января 2011

Двоичный файл не будет идентичным, но двоичные интерфейсы должны быть, что вам нужно.

Причина, по которой вы не можете использовать VS2010, заключается в том, что это еще не качество продукции.Они думают, что вы должны подождать VS2010 SP1 как минимум.

Вы думаете, они просто упрямы и упрямы, а?Гробит все ваше веселье.У них есть причины.Хорошие.

Из-за таких ошибок:

https://connect.microsoft.com/VisualStudio/feedback/details/565959

...