__interface
Microsoft-spezifisch
Eine Visual C++-Schnittstelle kann definiert werden, wie nachfolgend veranschaulicht:
Wählen Sie können keine oder mehrere Basisschnittstellen erben.
Kann nicht von einer Basisklasse erben.
Kann nur öffentlich, rein virtuelle Methoden enthalten.
Die Konstruktoren, Destruktoren oder Operatoren enthalten.
Die statische Methoden enthalten.
Die Datenmember nicht enthalten. Eigenschaften sind nicht zulässig.
modifier __interface interface-name {interface-definition};
Hinweise
KlasseStruktur C oder C++ kann mit diesen Regeln implementiert werden, aber __interface erzwingt diese.
Beispielsweise ist Folgendes schnittstellendefinition eine Beispiel:
__interface IMyInterface {
HRESULT CommitX();
HRESULT get_X(BSTR* pbstrName);
};
Weitere Informationen über verwaltete Schnittstellen finden Sie unter Schnittstellenklasse.
Beachten Sie, dass Sie nicht explizit angeben müssen, dass die CommitX und get_X rein virtuelle Funktionen sind.Eine entsprechende Deklaration für die erste Funktion wäre:
virtual HRESULT CommitX() = 0;
__interface bedeutet den Modifizierer novtable__declspec .
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Eigenschaften an, die in einer Schnittstelle deklariert werden.
// 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);
}