描述:
希望对大家有帮助
#include "stdafx.h"
#include <unknwn.h>
using namespace std;
static const GUID IID_ILzy = {0x07758258,0x1234,0x1234,{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}};
interface ILzy : public IUnknown
{
public:
virtual int Add(int n1,int n2) = 0;
};
class CLzy : public ILzy
{
private:
ULONG m_cRef;
public:
STDMETHOD(QueryInterface)(REFIID riid,void **ppv);
STDMETHOD_(ULONG,AddRef)();
STDMETHOD_(ULONG,Release)();
int Add(int n1,int n2);
};
STDMETHODIMP CLzy::QueryInterface (REFIID riid,void **ppv)
{
if (riid == IID_ILzy)
*ppv = static_cast<ILzy*>(this);
else if(riid == IID_IUnknown)
*ppv = static_cast<CLzy*>(this);
else
{
*ppv = 0;
return E_NOINTERFACE;
}
reinterpret_cast<CLzy*>(*ppv)->AddRef();
return S_OK;
}
STDMETHODIMP_(ULONG) CLzy::AddRef ()
{
return ++m_cRef;
}
STDMETHODIMP_(ULONG) CLzy::Release ()
{
ULONG res = --m_cRef;
if(res == 0)
delete this;
return res;
}
int CLzy::Add (int n1,int n2)
{
return n1 + n2;
}
int _tmain(int argc, _TCHAR* argv[])
{
ILzy *pI = NULL;
CLzy *pL = new CLzy;
pL->QueryInterface (IID_ILzy,(void**)&pI);
if(pI)
cout << " 10 + 4 = " << pI->Add (10,4) << endl;
pI->Release ();
return 0;
}