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;
}
#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;
}
...全文
相关推荐
VS2010 C++ ADO读取ACCESS 数据库
开发环境:VS2010C++ 用ADO方式读取数据库,代码清晰易懂,适合新手学习 数据库文件为ACCESS 需要用数据源配置的
vs2010调用SQL2008
sql2008和vs2010使用步骤和代码 可以直接用,有头文件不需要配置
MFC对话框对Excel的操作(VS2010)
主要内容: 1、MFC调用Excel文件。 2、向Excel文件中写入数据并保存。 3、从控件中赌球数据放入Excel中。 4、实现了MFC与Excel数据之间的传递。
VC++(VS2010)读写Excel文件代码(UNICODE版)
原版本为多字节版,现修改为UNICODE版。
利用反射动态创建对象在VS.Net中,有很多种方法动态调用对象的构造函数
在VS.Net中,有很多种方法动态调用对象的构造函数。一是通过Activator类的CreateInstance()方法。这个方法我们在Remoting中也用过。它实际上是在本地或从远程创建对象类型,或获取对现有远程对象的引用。它的方法签名是:public static object CreateInstance(Type);(还有其他重载方法)注意它的返回值为object,MSDN对返回值的描述是:对新创建对象的引用


其它技术问题
