共用方式為


__interface

Microsoft 專有的

Visual C++ 介面定義如下:

  • 可繼承自零或多個基底介面。

  • 無法繼承自基底類別。

  • 僅包含公用、 純虛擬方法。

  • 不能包含建構函式、 解構函式或運算子。

  • 不可包含靜態方法。

  • 不能包含資料成員 ; 不允許屬性。

modifier __interface interface-name {interface-definition};

備註

C + + 類別結構可以用這些規則,來實作,但__interface會強制執行它們。

比方說下, 面是範例介面定義:

__interface IMyInterface {
   HRESULT CommitX();
   HRESULT get_X(BSTR* pbstrName);
};

在 managed 介面上的資訊,請參閱界面類別

請注意您不需要明確地指出那個CommitX和get_X函式是純虛擬。 將會是第一個函式的等位宣告:

virtual HRESULT CommitX() = 0;

__interface表示 novtable__declspec修飾詞。 

範例

下列範例會示範如何使用介面中宣告的屬性。

// deriv_interface.cpp
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>
#include <string.h>
#include <comdef.h>
#include <stdio.h>

[module(name="test")];

[ object, uuid("00000000-0000-0000-0000-000000000001"), library_block ]
__interface IFace {
   [ id(0) ] int int_data;
   [ id(5) ] BSTR bstr_data;
};

[ coclass, uuid("00000000-0000-0000-0000-000000000002") ]
class MyClass : public IFace {
private:
    int m_i;
    BSTR m_bstr; 

public:
    MyClass()
    {
        m_i = 0;
        m_bstr = 0;
    }

    ~MyClass()
    {
        if (m_bstr) 
            ::SysFreeString(m_bstr);
    }

    int get_int_data()
    {
        return m_i;
    }

    void put_int_data(int _i) 
    {
        m_i = _i;
    }

    BSTR get_bstr_data()
    { 
        BSTR bstr = ::SysAllocString(m_bstr);
        return bstr; 
    }

    void put_bstr_data(BSTR bstr) 
    { 
        if (m_bstr) 
            ::SysFreeString(m_bstr);
        m_bstr = ::SysAllocString(bstr);
    }
};

int main()
{
    _bstr_t bstr("Testing");
    CoInitialize(NULL);
    CComObject<MyClass>* p;
    CComObject<MyClass>::CreateInstance(&p);
    p->int_data = 100;
    printf_s("p->int_data = %d\n", p->int_data);              
    p->bstr_data = bstr;
    printf_s("bstr_data = %S\n", p->bstr_data);
}
  

請參閱

參考

C + + 關鍵字

其他資源

介面屬性