和语言无关,可以在 C++ 中用类的方式来定义。一个 COM 对象可以实现多个接口。
IUnknown:未直接口 一个特殊的接口,所有COM接口都继承IUnKnown这个接口。
interface IUnknown{ HRESULT QueryInterface( [in] REFIID iid, [out] void **ppv ); ULONG AddRef(); ULONG Release(); }
|
mylib.h代码:
__interface IAntiCheat:public IUnknown{ virtual BOOL IAntiCheat_PUBG(string& Tag); };
class Inherit:public IAntiCheat{ public: virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv); virtual ULONG __stdcall AddRef() { return 0;} virtual ULONG __stdcall Release() { return 0;} virtual BOOL IAntiCheat_PUBG(string& Tag); };
IUnknown* CreateInstance();
|
mylib.cpp 代码:
static const GUID IID_IAntiCheat = {0x4abc66d,0xba5f,0x4e17,{0x82,0xfd,0x98,0x5d,0x9c,0x0,0x73,0xfe}};
BOOL Inherit::IAntiCheat_PUBG(string& Tag) { return 0; }
HRESULT __stdcall Inherit::QueryInterface(const IID& iid, void** ppv){ IUnknown* pI = static_cast<IAntiCheat*>(new Inherit); if(iid == IID_IAntiCheat){*ppv = static_cast<IAntiCheat*>(pI);} else{ *ppv = NULL; return E_NOINTERFACE; } reinterpret_cast<IUnknown*>(*ppv)->AddRef(); return S_OK; }
IUnknown* CreateInstance(){ IUnknown* pI = static_cast<IAntiCheat*>(new Inherit);
pI->AddRef(); return pI ; }
|
test.cpp 代码:
int _tmain(int argc, _TCHAR* argv[]) { static const GUID IID_IAntiCheat = {0x4abc66d,0xba5f,0x4e17,{0x82,0xfd,0x98,0x5d,0x9c,0x0,0x73,0xfe}}; IUnknown* pIUnknown = CreateInstance(); IAntiCheat* pIAntiCheat = NULL; HRESULT hr = pIUnknown->QueryInterface( IID_IAntiCheat, (void**)&pIAntiCheat ); if (SUCCEEDED(hr)){ string Tag; pIAntiCheat->IAntiCheat_PUBG(Tag); } getchar(); return 0; }
|