CreateInstance()在vs2010中为什么没有定义呢?

fsy351 2011-12-22 07:06:26
#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;
}
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsy351 2011-12-22
  • 打赏
  • 举报
回复
啊, 原来是复制的时候少了代码!这个纠结啊!谢谢whoami1978!
whoami1978 2011-12-22
  • 打赏
  • 举报
回复
有CreateInstance()这个函数吗?
不光是vs2010中没有定义,从VC6~VS2010都没见过这个函数
你的代码是自己写的还是网上的?
如果是后者,CreateInstance()是个自定义函数,你的代码不全

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧