2016-07-24 5 views
0

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

Я прошел через это LINK Это не отвечало на мой вопрос хорошо.

Спасибо!

+0

Если ваша DLL будет использоваться только в одной программе, просто статически свяжите ее. –

+1

Вы обнаружите недостатки достаточно легко. Основным преимуществом COM является независимость от языка и времени выполнения. Это не похоже на большую часть функции, если она написана на C++ и используется только из программы на C++. Но на самом деле это C++ не имеет ABI. Вы можете использовать свою DLL из программы, которая была создана с любым компилятором C++, используя произвольные параметры компиляции. Вы не получите это сразу, только позже. –

ответ

3

Ответы в полученной вами ссылке (COM vs non-COM DLL) адресуют основные важные моменты. Если это didn't answer my question well, то вам следует рассмотреть вопрос о более узком вопросе.

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

  • C++ DLL, потребляемая (только) другим кодом C++, может выставлять полные интерфейсы C++. См., Например, Using dllimport and dllexport in C++ Classes: You can declare C++ classes with the dllimport or dllexport attribute. These forms imply that the entire class is imported or exported..

    Напротив, COM-библиотека DLL может публиковать только COM интерфейсы, которые являются языковыми и менее дружественными к C++. См. Например, What Is a COM Interface?.

  • Связано с предыдущей точкой, интерфейс DLL C++ очень сильно связан с любым кодом C++, который его использует. За редким исключением это означает, что как DLL, так и клиентский код необходимо скомпилировать с тем же компилятором и с той же версией. Кроме того, всякий раз, когда DLL экспортирует классы (включая изменения private), потенциально весь код клиента необходимо перекомпилировать.

    Напротив, COM-интерфейс является контрактом ABI (What is Application Binary Interface (ABI)?) гораздо более слабо связанным с кодом клиента. По сути, пока опубликованные интерфейсы не меняются, DLL-код может изменяться по желанию без необходимости перекомпиляции клиента.

Насколько производительность, что преждевременно сравнивать и невозможно предугадывать без много больше специфики. Интерфейсы C++ vs. COM имеют совершенно разные семантики и возможности.