CreateInstance()在vs2010中为什么没有定义呢?
#include "iostream"
#include "objbase.h"
using namespace std;
void trace( const char* msg )
{
cout<<msg<<endl;
}
interface IX : IUnknown
{
virtual void _stdcall Fx();
};
interface IY : IUnknown
{
virtual void _stdcall Fy();
};
extern const IID IID_X;
extern const IID IID_Y;
class ClassA : public IX, public IY
{
virtual HRESULT _stdcall QueryInterface( const IID& iid ,void ** pvv );
virtual ULONG _stdcall AddRef();
virtual ULONG _stdcall Release();
virtual void _stdcall Fx();
virtual void _stdcall Fy();
};
HRESULT _stdcall ClassA :: QueryInterface( const IID& iid, void ** pvv)
{
if( iid == IID_IUnknown ) {
trace( "Iunknow ");
*pvv = static_cast< IX * > (this);
}
else if( iid == IID_X ) {
trace( "cxxxxxx" );
*pvv = static_cast< IX * > (this);
}
else if( iid == IID_Y ) {
trace( "yyyyyy");
*pvv = static_cast< IY * > (this);
}
else {
trace( "not have ");
*pvv = NULL;
return E_NOINTERFACE;
}
reinterpret_cast< IUnknown * > (*pvv)->AddRef();
return S_OK;
}
static const IID IID_X = {0x32bb8320, 0xb41b, 0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x82}};
static const IID IID_Y = {0x32bb8321, 0xb41b, 0x11cf,{0xa6,0xbb,0x0,0x80,0xc7,0xb2,0xd6,0x82}};
int main()
{
HRESULT hr;
trace( " get an iunknow poiner ,.");
IUnknown* pIUnknown = CreateInstance();
IX* pIX = NULL;
hr = pIUnknown->QueryInterface( IID_X, ( void ** )&pIX );
if( SUCCEEDED(hr)) {
trace( " succeed Ix ");
pIX->Fx();
}
IY* pIY = NULL;
hr = pIUnknown->QueryInterface( IID_Y, ( void ** )&pIY );
if( SUCCEEDED(hr)) {
trace( " succeed Iy ");
pIY->Fy();
}
delete pIUnknown;
return 0;
}