Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer


Microsoft Specific

A Visual C++ interface can be defined as follows:

  • 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.

modifier __interface interface-name {interface-definition};

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);

For information on managed interfaces, see interface class.

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;

__interface implies the novtable __declspec modifier.

The following sample shows how to use properties declared in an interface.

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


[ 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 {
    int m_i;
    BSTR m_bstr; 

        m_i = 0;
        m_bstr = 0;

        if (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) 
        m_bstr = ::SysAllocString(bstr);

int main()
    _bstr_t bstr("Testing");
    CComObject<MyClass>* 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
© 2015 Microsoft