谢谢各位帮忙看看我学习中的几个问题,1.判断调用是否成功的define宏
#define SUCCEEDED(Status)((HRESULT)(Status)>=0)
(HRESULT)(Status)该怎么理解,是不是Status有可能不是HRESULT类型,要转换一下?2.DEFINE_GUID中为什么会有那么多都好隔开?还有前面有0x的前缀,这个跟16进制是什么关系?DEFINE_GUID(CLSID_Math,
0x9509f982,0x6991,0x40c4,0xb3,0xdf,0xa,0x8,0xc9,0xef,0xf5,0x20,0x05
)3.QueryInterface中返回IUnknown接口时的情况。
HRESULT Math::QueryInterface(REFIID riid, viod** ppv){
*ppv=0;
if(riid==IID_IUnknown)
*ppv=(IMath*)this; //这里为什么是转换成一个IMath接口的指针?
else if(riid==IID_IMath)
*ppv=(IMath*)this;
else if(riid==IID_IAdvanceMath)
*ppv=(IAdvancedMath*)this;
if(*ppv)
{
(Iunknown *)(*ppv)->AddRef();//这里把这个指针转换成IUnkown上面去了?
Return(S_OK);
}
return(E_NOINTERFACE);
}
非常感谢
#define SUCCEEDED(Status)((HRESULT)(Status)>=0)
(HRESULT)(Status)该怎么理解,是不是Status有可能不是HRESULT类型,要转换一下?2.DEFINE_GUID中为什么会有那么多都好隔开?还有前面有0x的前缀,这个跟16进制是什么关系?DEFINE_GUID(CLSID_Math,
0x9509f982,0x6991,0x40c4,0xb3,0xdf,0xa,0x8,0xc9,0xef,0xf5,0x20,0x05
)3.QueryInterface中返回IUnknown接口时的情况。
HRESULT Math::QueryInterface(REFIID riid, viod** ppv){
*ppv=0;
if(riid==IID_IUnknown)
*ppv=(IMath*)this; //这里为什么是转换成一个IMath接口的指针?
else if(riid==IID_IMath)
*ppv=(IMath*)this;
else if(riid==IID_IAdvanceMath)
*ppv=(IAdvancedMath*)this;
if(*ppv)
{
(Iunknown *)(*ppv)->AddRef();//这里把这个指针转换成IUnkown上面去了?
Return(S_OK);
}
return(E_NOINTERFACE);
}
非常感谢
解决方案 »
- 真正懂Unicode工程、ANSI文件、Unicode文件,关系的进
- 又来问dll的问题了...
- [向jiangsheng提问] [100分]IHTMLElement3Ptr FireEvent问题
- VC++中的基础问题请教大家
- error LNK2019是什么错误?怎么解决
- BcgControlBar7.30发布了,哪位能搞到正式版?或者大家一起买如何?
- 怎么找不到WM_NCPAINT???
- 如何把一个数据库连接传入COM,接口如何定义,内部如何处理?
- 如何让一幅外部的BMP图片刚好显示在一个Picture控件中?
- VC中如何使用ADO
- VS2008中如何设置菜单快捷键?
- 怎么通过BHO来获取Http请求中的Header内容!
EXTERN_C const GUID DECLSPEC_SELECTANY name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=5890
Globally Unique Identifier(全球唯一标识符)
为什么要使用 GUID ?
世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。
http://baike.baidu.com/view/185358.htm?fr=ala0_1
DEFINE_GUID是全球唯一ID,它是用十六进制保存的.至于为什么用逗号隔开,那你去看他的定义就明白了.if(riid==IID_IUnknown)
*ppv=(IMath*)this; //这里为什么是转换成一个IMath接口的指针?
当传递一个IID_IUnKonw时,你提供的默认接口,这跟可根据情况改. (Iunknown *)(*ppv)->AddRef();//这里把这个指针转换成IUnkown上面去了?
这个是调用接口的引用计数.(每个接口都是从Iunknown 继承,Iunknown 实现了AddRef