__interface
Khusus Microsoft
Antarmuka Microsoft C++ dapat didefinisikan sebagai berikut:
Dapat mewarisi dari nol atau lebih antarmuka dasar.
Tidak dapat mewarisi dari kelas dasar.
Hanya dapat berisi metode virtual publik dan murni.
Tidak boleh berisi konstruktor, destruktor, atau operator.
Tidak dapat berisi metode statis.
Tidak dapat berisi anggota data; properti diperbolehkan.
Sintaks
modifier __interface interface-name {interface-definition};
Keterangan
Kelas atau struktur C++ dapat diimplementasikan dengan aturan ini, tetapi __interface
memberlakukannya.
Misalnya, berikut ini adalah contoh definisi antarmuka:
__interface IMyInterface {
HRESULT CommitX();
HRESULT get_X(BSTR* pbstrName);
};
Untuk informasi tentang antarmuka terkelola, lihat kelas antarmuka.
Perhatikan bahwa Anda tidak perlu secara eksplisit menunjukkan bahwa CommitX
fungsi dan get_X
murni virtual. Deklarasi yang setara untuk fungsi pertama adalah:
virtual HRESULT CommitX() = 0;
__interface
menyiratkan pengubah yang dapat__declspec
diubah.
Contoh
Sampel berikut menunjukkan cara menggunakan properti yang dideklarasikan dalam antarmuka.
// 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 Khusus Microsoft
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk