__interface
Microsoft'a Özgü
Microsoft C++ arabirimi aşağıdaki gibi tanımlanabilir:
Sıfır veya daha fazla temel arabirimden devralabilir.
Temel sınıftan devralınamaz.
Yalnızca genel, saf sanal yöntemler içerebilir.
Oluşturucular, yıkıcılar veya işleçler içeremez.
Statik yöntemler içeremez.
Veri üyeleri içeremez; özelliklerine izin verilir.
Sözdizimi
modifier __interface interface-name {interface-definition};
Açıklamalar
C++ sınıfı veya yapısı bu kurallarla uygulanabilir, ancak __interface
bunları zorunlu kılar.
Örneğin, örnek bir arabirim tanımı aşağıda verilmiştir:
__interface IMyInterface {
HRESULT CommitX();
HRESULT get_X(BSTR* pbstrName);
};
Yönetilen arabirimler hakkında bilgi için bkz . arabirim sınıfı.
ve get_X
işlevlerinin saf sanal olduğunu açıkça belirtmeniz gerekmediğine CommitX
dikkat edin. İlk işlev için eşdeğer bir bildirim şöyle olabilir:
virtual HRESULT CommitX() = 0;
__interface
, novtable__declspec
değiştiricisini gösterir.
Örnek
Aşağıdaki örnekte bir arabirimde bildirilen özelliklerin nasıl kullanılacağı gösterilmektedir.
// 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
END Microsoft'a Özgü
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin