Могу ли я использовать WRL для записи COM-сервера?

Могу ли я использовать библиотеку WRL в C ++ в качестве замены ATL для написания COM-компонента? И если да, смогу ли я использовать его на старых настольных системах Windows, таких как Windows XP?

Я почти уверен, что ответ на первый вопрос положительный, так как я нашел этот урок на MSDN:

http://msdn.microsoft.com/en-us/library/jj822931.aspx

но как насчет систем не-Windows 8?

2

Решение

Ну, конечно, вы можете. Вы можете написать COM-сервер в чистом коде C ++ без каких-либо вспомогательных классов. Вы можете написать один на C, если вы действительно хотите, хотя это нарушение Женевской конвенции о правах программиста в большинстве юрисдикций.

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

  • Не поможет вообще реализовать IDispatch. Устаревший в WinRT, но все еще довольно важный на обычных серверах. Единственный способ использовать сервер на языке сценариев, IDispatch обеспечивает поддержку позднего связывания.
  • Никакой помощи для регистрации. Устаревший в WinRT, требуется для обычных серверов. Обратите внимание, что точка входа DllRegisterServer () отсутствует. Страница, на которую вы ссылались, исправляет проблему, требуя от вас написания сценария реестра вручную. Это работает, это не совсем то, что вы хотите сохранить или документировать, чтобы ИТ-персонал мог сделать это правильно.
  • Нет упаковщиков для типов автоматизации, таких как BSTR, VARIANT и SAFEARRAY. Устаревший в WinRT вместе с IDispatch. Вы все еще можете вернуться к <comutil.h> тем не мение.
  • Никакой помощи от мастеров, встроенных в Visual Studio, которые помогут вам сделать все правильно. COM-серверы неудобны, потому что определения появляются в нескольких местах в вашем коде. И должно быть точное совпадение. Вы не получите никакой помощи, чтобы убедиться, что CalculatorComponent точно соответствует IDL, это полностью зависит от вас. Ошибки компиляции, которые вы получаете от мелких ошибок, особенно при их поддержке, могут быть болезненными.

И целая куча мелочей, которые не стоит упоминать, такие как апартаменты, ActiveX, агрегация, информация об ошибках и т. Д. Больно, когда вам это нужно. Возможное преимущество WRL состоит в том, что там меньше мистического клея, у ATL его достаточно, что значительно повышает уровень абстракции. Это было сделано намеренно, но этому нужно научиться. Конечно, нет ничего, когда вы используете чистый C ++, хотя вы должны сами писать слишком много.

6

Другие решения

Да. Вы можете написать стандартный компонент COM.
Eсть образец для этого прямо в документах.

И нет: такой компонент COM будет работать только в Windows 8 и более поздних версиях …

0

По вопросам рекламы [email protected]