Microsoft Visual C ++ обратная совместимость - PullRequest
1 голос
/ 19 апреля 2011

Рассмотрим API C ++, определенный как последовательность __options(declexport/import) классов.

Далее, предположим, что вызывающему никогда не разрешается вызывать обычный operator new(size_t) для этих классов.Либо статический фабричный метод выполняет новые операции, либо существует специфический для класса operator new.И то же самое отмечает размер удаляемого файла по мере необходимости (часто это просто виртуальный деструктор).

Теперь, если вы скомпилируете и связываете DLL и IMPLIB с помощью инструментов из VS2010, можете ли вы отдать это значение и DLLпользователь VS2005 и ожидать, что он будет работать?

MFC здесь не участвует вообще.

Я был бы особенно благодарен за любую ссылку на любое относительно формальное заявление Microsoft по этому вопросу.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

До тех пор, пока искажение имени в API C ++ идентично (они есть) и не использует специфические параметры типа STL, такие как basic_string или std::map, реализация которых могла изменяться между выпусками компилятора(и они есть), тогда он должен просто работать.

Конечно, вы захотите убедиться, что вы либо скомпилировали свою DLL, используя режим /MT (статические связанные среды выполнения), либо включили распространяемые файлы для VS2010среды выполнения с предоставленными вами библиотеками и целевыми ссылками.

EDIT : Расширение на "не передавайте типы, имеющие реализации, зависящие от версии".Частичный список легче всего найти, посмотрев выходные данные экспорта MSVC100P.DLL.

cd %VS100COMNTOOLS%\..\VC\redist\x86\Microsoft.VC100.CRT
DUMPBIN /exports MSVCP100.DLL

Следующим вопросом будут реализации только для заголовков таких вещей, как map или set, которые имеютизменено под капотом между версиями компилятора.

Вот почему настоятельно рекомендуется, чтобы только скалярные типы передавались через границы между аренами памяти.И поэтому простые тесты пройдут и будут надежными.

1 голос
/ 19 апреля 2011

Вы не упомянули, использовали ли вы MFC для создания DLL. Если у вас есть, обычные DLL должны работать, но я не думаю, что расширение будет работать как последние ссылки на библиотеки MFC.

http://www.codeguru.com/cpp/cpp/cpp_mfc/tutorials/article.php/c4017

http://www.experts -exchange.com / Программирование / System / Windows__Programming / MFC / Q_20385543.html

http://msdn.microsoft.com/en-us/library/26h8x9sy%28v=VS.100%29.aspx

EDIT Если это обычная DLL, проблем не должно быть. Также зависит от типа связи.

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