Поделиться через


object - атрибут

Атрибут интерфейса [object] идентифицирует COM-интерфейс. (Список атрибутов интерфейса, не включающий атрибут [object] , указывает на интерфейс RPC DCE.)

[ 
    object, 
    uuid(string-uuid)
    [ , interface-attribute-list] 
] 
interface interface-name : base-interface
{
...    
}

Параметры

string-uuid

Строка UUID, созданная служебной программой Uuidgen. Строку UUID можно заключить в кавычки.

interface-attribute-list

Другие атрибуты, которые применяются к интерфейсу в целом.

имя интерфейса

Имя интерфейса.

базовый интерфейс

COM-интерфейс, от которого наследуется этот интерфейс. Базовым интерфейсом должен быть IUnknown, IDispatch или другой COM-интерфейс, который прямо или косвенно является производным от IUnknown или IDispatch.

Комментарии

Список атрибутов интерфейса для COM-интерфейса должен содержать атрибут [uuid] , но он не может включать атрибут [version] .

По умолчанию при компиляции COM-интерфейса с помощью компилятора MIDL создаются файлы, необходимые для создания библиотеки DLL прокси-сервера. Эта библиотека DLL содержит код для поддержки использования пользовательского COM-интерфейса клиентскими приложениями и серверами объектов. Однако если в списке атрибутов интерфейса для COM-интерфейса указан атрибут [local] , компилятор MIDL создает только файл заголовка интерфейса.

Компилятор MIDL автоматически создает тип данных интерфейса для COM-интерфейса. В качестве альтернативы можно использовать typedefс интерфейсом ключевое слово для явного определения типа данных интерфейса. Затем спецификация интерфейса может использовать тип данных интерфейса в параметрах функции и возвращаемых значениях, элементах структуры и объединения и других объявлениях типов. В следующем примере показано использование автоматически создаваемого типа данных IStream :

[
    object, 
    uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
] 
interface IStream : IUnknown
{ 
    typedef IStream * LPSTREAM; 
    // Other interface definition statements.
}

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

Функции-члены интерфейса объектов, не являющиеся [локальными] , должны иметь возвращаемое значение HRESULT или SCODE. (Обратите внимание, что в более ранних версиях MIDL функции-члены возвращали void. Однако, начиная с MIDL версии 3.0, при возврате void возникает ошибка компилятора.) Наличие возвращаемого значения HRESULT или SCODE означает, что если исключение создается во время удаленного вызова, созданные прокси-серверы перехватят исключение и возвращают код исключения в возвращаемом значении. Если приложение может игнорировать ошибки, возникающие во время удаленного вызова процедуры, можно указать HRESULT в качестве возвращаемого типа, не проверяя возвращаемое значение после вызова.

Если вы перекомпилируете старое приложение, изменение типов возвращаемых данных может привести к проблемам обратной совместимости, когда сервер отправляет новый результат клиенту. В качестве альтернативы изменению возвращаемого типа можно пометить функцию, возвращающую void , атрибутом [call_as] , что делает ее локальной. Затем определите связанную удаленную функцию с теми же параметрами, но с возвращаемым типом HRESULT. При необходимости локальная функция может вызвать исключение на основе этого значения HRESULT.

Атрибут [object] недоступен при компиляции с помощью параметра / osf компилятора MIDL.

Примеры

[
    uuid(12345678-1234-1234-1234-123456789ABC), 
    object
] 
interface IMyInterface : IUnknown
{
    // Interface definition statements.
}

[
    uuid(87654321-1234-1234-1234-123456789ABC), 
    object, 
    local
] 
interface ILocalInterface : ISomeOldCOMInterface
{
    // Interface definition statements.
}

См. также раздел

call_as

Файл определения интерфейса (IDL)

iid_is

Интерфейс

Местных

/Osf

Typedef

uuid

Версия