首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

感觉用COM的智能指针的时分,CLSID是个多余的参数啊

2013-09-06 
感觉用COM的智能指针的时候,CLSID是个多余的参数啊!本帖最后由 u011849794 于 2013-08-28 09:43:00 编辑我

感觉用COM的智能指针的时候,CLSID是个多余的参数啊!
本帖最后由 u011849794 于 2013-08-28 09:43:00 编辑 我自己建立一个ATL工程,创建了组件对象Foo,然后再建立一个控制台程序来调用这个com
import指令会使得VC从tlb文件去创建tlh/tli文件,在tlh文件当中就声明了类似IFooPtr,IBarPtr这样的只能指针类型。假设Foo里面有2个接口叫做Foo/Math

然后我就可以


IFooPtr pFoo(CLSID_Foo,NULL,CLSCTX_ALL);
IMathPtr pMath(CLSID_Foo,NULL,CLSCTX_ALL);

这样来创建一个对象指针,相当于

IFoo* pf;
IMath* pm;
HRESULT hr=CoCreateInstance(CLSID_Foo,NULL,CLSCTX_ALL,IID_Foo,(void**)&pf);
hr=CoCreateInstance(CLSID_Foo,NULL,CLSCTX_ALL,IID_Math,(void**)&pm);


问题是,既然IFooPtr是和CLSID_Foo以及IID_Foo绑定的,那么为什么IFooPtr构造函数的第一个参数还要制定一遍CLSID_Foo呢? 指定其他的值显然导致com抛出异常啊。

非常疑惑,请指教!
[解决办法]
系统好像没有提供指针到CLSID的映射吧?因此是必要的
[解决办法]
我觉得,某个接口不一定是某一个组件独有的,像某组件A,B,可以都有IFoo接口,如果同一个工程中需要用到这两个组件,如果不指定是哪个CLSID的组件,那它就不知道到底是属于哪个组件的
[解决办法]
其实最简单的就是用IDispatchPtr这些了

热点排行