В ATL 2.1 IObjectSafetyImpl класс помечен элемент управления как безопасный для сценариев. По соображениям безопасности было удалено это значение по умолчанию, поэтому необходимо явно указать параметры безопасности с помощью второй параметров шаблона. Вы должны теперь подвергать этого класса с помощью COM_INTERFACE_ENTRY , а не COM_INTERFACE_ENTRY_IMPL.
ATL 3.0 использует ключевое слово компилятора __uuidof ( класса ) для получения соответствующего IID для данного класса. Из-за изменений в макрос COM_INTERFACE_ENTRYтеперь вы просто включать заголовок для интерфейса для использования, вместо того, чтобы также ссылки на библиотеки, которая определяет соответствующие идентификаторы IID для данного интерфейса. Это изменение может вызвать проблемы, если заголовок ранее созданные в старой версии MIDL, или если он был стороны кодом и не помечены соответствующим образом.
Если объявление для интерфейса в заголовке не отмеченные связанного __declspec(uuid), то любая попытка использовать ключевое слово __uuidof() для этого интерфейса не будут. Вы можете вернуться к старой макросов COM_INTERFACE_ENTRY стиль (ATL 2.x) путем определения _ATL_NO_UUIDOF в настройках вашей сборки для решения любых проблем с такое новое поведение.
В дополнение к _ATL_DEBUG_QI и _ATL_DEBUG_REFCOUNT, присутствующие в ATL 2.x, есть новый _ATL_DEBUG_INTERFACES, который будет отслеживать в консоли отладки любой утечки интерфейса, которые являются обнаружены при _Module.Term (когда сервер выключается).
Родственные слова
Отладка советы для объектов ATL
| Макрос | Комментарий |
| COM_INTERFACE_ENTRY_IMPL | Устарели. Замените COM_INTERFACE_ENTRY. |
| COM_INTERFACE_ENTRY_IMPL_IID | Устарели. Замените COM_INTERFACE_ENTRY_IID. |
| CHAIN_MSG_MAP_ALT_DYNAMIC | Устаревшие и удаленных. |
| BEGIN_PROPERTY_MAP | Устарели. Используйте новый макрос карта собственности, BEGIN_PROP_MAP, как описано в Новых макросов. |
| END_PROPERTY_MAP | Устарели. Используйте новый макрос карта собственности, END_PROP_MAP, как описано в Новых макросов. |