VC ++ 2010 SDK для клиентов VC ++ 2008, 2005 - PullRequest
2 голосов
/ 26 января 2012

Я хочу написать SDK, используя Visual C ++ 2010, который может использоваться клиентами VC ++ 2010, а также клиентами старой версии VC ++.Допустим, я хочу совместить его с версиями 2005 и 2008 годов.SDK содержит несколько файлов h, lib и dll.Библиотеки экспортировали классы C ++ и глобальные функции.Публичный интерфейс SDK (h-файлы) не содержит никаких функций, которые не поддерживаются в предыдущих версиях VC ++.Внутренняя реализация SDK может содержать такие функции (как лямбда-выражения, ссылки на значения и т. Д.).

Некоторые общедоступные методы SDK имеют параметры интерфейса обратного вызова.Интерфейсы обратного вызова определены в моих h-файлах, реализованы в клиентском коде и переданы моим методам.Может ли это быть проблемой?

Я сделал несколько небольших тестов и обнаружил, что это работает.Кто-нибудь знает какие-либо проблемы с использованием VC ++ 2010 SDK клиентами C ++, написанными в старых версиях VC ++?

1 Ответ

2 голосов
/ 26 января 2012

Ключевые принципы:

  • Вы не можете предоставлять какие-либо объекты из стандартной библиотеки C ++ (std :: string и т. Д.), Их расположение не совместимо
  • Вы не можете использовать исключения, SEH в порядке
  • Вы не можете вернуть указатели, которые требуют, чтобы клиентский код освободил указанный ресурс
  • Вы должны построить с / MT, чтобы у клиента не было головной боли при поиске требуемой версии CRT
  • Как правило, с 2003 по 2010 год все в порядке с макетом объекта, если вы можете быть уверены, что на него не влияют настройки компилятора, отличные от / Zp. Виртуальное наследование было проблематичным. Убедитесь, что sizeof дает одинаковый размер независимо от выбранной конфигурации.

COM - хороший способ обеспечить максимальную совместимость.

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