Безопасно ли использовать во время выполнения dll COM v90 в исполняемом файле v110?

1

Можно ли использовать COM-dll, построенную с помощью компилятора v90, в исполняемом файле, построенном с помощью компилятора v110?

DLL v90 используется исполняемым файлом во время выполнения через интерфейс COM (это не #import ed).

Исполняемый файл строит против tlb dll. Оба ссылаются на MFC статически, и оба используют версию /MT версии библиотеки времени выполнения.

Я понимаю, что это возможно, но не безопасно. Так как существуют полоски вокруг использования (то есть распределение памяти отличается, поэтому объекты не могут быть выделены в dll и удалены в исполняемом файле, так как это приведет к неожиданному поведению).

Пожалуйста, может кто-нибудь уточнить для меня?

Теги:
visual-studio

1 ответ

8
Лучший ответ

Да, это безопасно. Если вы подчиняетесь правилам COM.

Правилами COM являются правила ABI 1, которые включают правила, относящиеся к управлению памятью, потокам и т.д.

Не пытайтесь подорвать эти правила, когда-либо.

Даже если один и тот же компилятор используется для dll и exe. Например, не выделяйте new с одной стороны и delete с другой - даже если вы используете один и тот же компилятор.

COM не ограничивает или не обеспечивает соблюдение определенного языка или платформы с обеих сторон - существует много технологий, языков и платформ, которые обеспечивают совместимость COM, например, COM-объект, реализованный в.NET, будет работать с exe C++, который импортирует объект, поэтому поскольку обе стороны подчиняются правилам.


1 Бинарный интерфейс приложения

  • 0
    Спасибо за ваш ответ. Это очень полезно. Таким образом, по существу, интерфейс COM позволяет различным языкам и компиляторам работать вместе, если они не нарушают правила ABI. У вас есть ссылка на все правила ABI?
  • 0
    (ABI = двоичный интерфейс приложения)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню