object 屬性

[object]介面屬性會識別 COM 介面。 (不包含 [object] 屬性的介面屬性清單表示 DCE RPC 介面。)

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

參數

string-uuid

Uuidgen 公用程式所產生的 UUID 字串。 您可以用引號括住 UUID 字串。

interface-attribute-list

套用至整個介面的其他屬性。

interface-name

介面的名稱。

base-interface

這個介面衍生自其中的 COM 介面。 基底介面必須是 IUnknownIDispatch或其他衍生自 IUnknownIDispatch的 COM 介面。

備註

COM 介面的介面屬性清單必須包含 [uuid] 屬性,但不能包含 [version] 屬性。

根據預設,使用 MIDL 編譯器編譯 COM 介面會產生建置 Proxy DLL 所需的檔案。 此 DLL 包含程式碼,可支援用戶端應用程式和物件服務器使用自訂 COM 介面。 不過,如果 COM 介面的介面屬性清單指定 [local] 屬性,MIDL 編譯器只會產生介面標頭檔。

MIDL 編譯器會自動產生 COM 介面的介面資料類型。 或者,您可以使用 typedef 搭配 interface 關鍵字來明確定義介面資料類型。 介面規格接著可以在函式參數中使用介面資料類型,並傳回值、 結構等位 成員,以及其他類型宣告。 下列範例說明如何使用自動產生的 IStream 資料類型:

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

在 COM 介面中,所有介面成員函式都會假設為虛擬函式。 虛擬函式具有隱含 這個 指標作為第一個參數。 虛擬函式資料表包含每個介面成員函式的專案。

[local] 物件介面成員函式必須具有 HRESULT 或 SCODE 的傳回值。 (請注意,舊版 MIDL 允許成員函式傳回 void。不過,從 MIDL 3.0 版開始,傳回 void 會產生編譯器錯誤。) 具有 HRESULT 或 SCODE 的傳回值表示如果在遠端呼叫期間產生例外狀況,則產生的 Proxy 會攔截例外狀況,並在傳回值中傳回例外狀況代碼。 如果您的應用程式能夠忽略遠端程序呼叫期間發生的錯誤,您可以將 HRESULT 指定為傳回類型,而不需在呼叫之後檢查傳回值。

如果您要重新編譯舊應用程式,當伺服器將新導入的結果傳送給用戶端時,變更傳回型別可能會造成回溯相容性問題。 除了變更傳回型別,您也可以使用[call_as]屬性來標記傳回void的函式,使其成為本機函式。 然後使用相同的參數來定義相關的遠端函式,但具有 HRESULT 的傳回類型。 如有需要,本機函式可以根據該 HRESULT 值引發例外狀況。

當您使用 MIDL 編譯器/osf參數進行編譯時,無法使用[object]屬性。

範例

[
    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

版本