__interface
Section spécifique à Microsoft
Une interface Microsoft C++ peut être définie comme suit :
Peut hériter de zéro ou plusieurs interfaces de base.
Ne peut pas hériter d'une classe de base.
Ne peut contenir que des méthodes publiques, virtuelles pures.
Ne peut pas contenir de constructeurs, de destructeurs ou d'opérateurs.
Ne peut pas contenir de méthodes statiques.
Ne peut pas contenir de données membres ; les propriétés sont autorisées.
Syntaxe
modifier __interface interface-name {interface-definition};
Notes
Une classe ou un struct C++ peut être implémenté avec ces règles, mais __interface
les applique.
Par exemple, voici un exemple de définition d'interface :
__interface IMyInterface {
HRESULT CommitX();
HRESULT get_X(BSTR* pbstrName);
};
Pour plus d’informations sur les interfaces managées, consultez la classe d’interface.
Notez que vous n'êtes pas obligé d'indiquer explicitement que CommitX
et get_X
sont des fonctions virtuelles pures. Une déclaration équivalente pour la première fonction se présenterait comme suit :
virtual HRESULT CommitX() = 0;
__interface
implique le modificateur novtable__declspec
.
Exemple
L'exemple suivant montre comment utiliser les propriétés déclarées dans une 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
FIN de la section spécifique à Microsoft
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour