__interface__interface

Microsoft 전용Microsoft Specific

Microsoft c + + 인터페이스는 다음과 같이 정의할 수 있습니다.A Microsoft C++ interface can be defined as follows:

  • 0개 이상의 기본 인터페이스에서 상속할 수 있습니다.Can inherit from zero or more base interfaces.

  • 기본 클래스에서 상속할 수 없습니다.Cannot inherit from a base class.

  • 공용 순수 가상 메서드만 포함할 수 있습니다.Can only contain public, pure virtual methods.

  • 생성자, 소멸자 또는 연산자를 포함할 수 없습니다.Cannot contain constructors, destructors, or operators.

  • 정적 메서드를 포함할 수 없습니다.Cannot contain static methods.

  • 데이터 멤버를 포함할 수 없습니다. 속성은 허용됩니다.Cannot contain data members; properties are allowed.

구문Syntax

modifier __interface interface-name {interface-definition};

설명Remarks

이러한 규칙을 사용 하 여 c + + 클래스 또는 구조체 를 구현할 수 있지만이를 __interface 적용 합니다.A C++ class or struct could be implemented with these rules, but __interface enforces them.

예를 들어 다음은 샘플 인터페이스 정의입니다.For example, the following is a sample interface definition:

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

관리 되는 인터페이스에 대 한 자세한 내용은 interface 클래스를 참조 하세요.For information on managed interfaces, see interface class.

CommitXget_X 함수가 순수 가상 함수임을 명시적으로 나타낼 필요가 없습니다.Notice that you do not have to explicitly indicate that the CommitX and get_X functions are pure virtual. 첫 번째 함수에 대한 동일한 선언은 다음과 같습니다.An equivalent declaration for the first function would be:

virtual HRESULT CommitX() = 0;

__interfacenovtable __declspec 한정자를 의미 합니다.__interface implies the novtable __declspec modifier.

예제Example

다음 샘플에서는 인터페이스에서 선언된 속성을 사용하는 방법을 보여 줍니다.The following sample shows how to use properties declared in an interface.

// 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);
}
p->int_data = 100
bstr_data = Testing

Microsoft 전용 종료END Microsoft Specific

참조See also

키워드Keywords
인터페이스 특성Interface Attributes