如何知道IDispatch中的QueryInterface都支持哪些特定的接口 难点每次都要给QueryInterface传递一个ID来进行测试是否支持 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IDispatch 接口...其目的就是能够让你不知道对方是什么接口, 而只需要知道对方有些什么函数或者属性就可以通过这个接口进行调用或者读写...你为何要这样做呢....明知道它就是一个什么类型的接口, 你也可以直接查询变换就是了. 虽然不知道你到底为了什么要去查接口的底细, 但是IDispatch接口创造出来的目的, 不是为了让你查底细... 是的,QueryInterface里面的实现只是一些if语句根据你传递过来的ID判断的 我能看到QueryInterface具体怎么实现的吗? 你转到定义看看,有的能有的不能,不过一些讲COM的书里一般都会讲到的 哦!原来不可以查询QueryInterface具体怎么实现的? 例如:http://hi.baidu.com/starloooooove/blog/item/728681007b247d8ce850cdc6.html网上随便找个例子看下就知道的HRESULT __stdcall CCOM_OBJECT::QueryInterface(const IID &iid, void **iface){// requesting the IUnknown base interfaceif (iid==IID_IUnknown){cout << "Requesting IUnknown interface" << endl;*iface = (IX*)this;} // end if// maybe IX?if (iid==IID_IX){cout << "Requesting IX interface" << endl;*iface = (IX*)this;} // end ifelse // maybe IYif (iid==IID_IY){cout << "Requesting IY interface" << endl;*iface = (IY*)this;} // end ifelse{ // cant find it!cout << "Requesting unknown interaface!" << endl;*iface = NULL;return(E_NOINTERFACE);} // end else// if everything went well cast pointer to IUnknown and call addref()((IUnknown *)(*iface))->AddRef();return(S_OK);} // end QueryInterface 如果你只有一个IDispatch接口指针,那你只能通过QueryInterface一个一个测试了。但如果你的调用的IDispatch对象的实现COM库支持TypeLib库,你可以通过ITypeLib获取支持的对象/接口等信息 如何在自己的Activex控件中播放flash和avi 『关于』数据导入到Excel问题??? 求助!!CImage使用中CImage::ReleaseDC()函数出错. 边城浪子爷爷请进来 一个查询xml里attribute的问题 紧急~~与WEB无关,却关乎所有中国人!! 怎么编写插件程序 如何改变保存后的文件在资源管理器中的图标???!!! msdn打不开了 有没有办法得知某个正在Listen的Socket端口一共开多少个Socket Handle 调用自定义类的消息函数问题。 GDI+ 资源泄漏~求知道 关于按钮控件怎么判断鼠标滑入滑出?
明知道它就是一个什么类型的接口, 你也可以直接查询变换就是了.
虽然不知道你到底为了什么要去查接口的底细, 但是IDispatch接口创造出来的目的, 不是为了让你查底细...
网上随便找个例子看下就知道的HRESULT __stdcall CCOM_OBJECT::QueryInterface(const IID &iid, void **iface)
{// requesting the IUnknown base interface
if (iid==IID_IUnknown)
{
cout << "Requesting IUnknown interface" << endl;
*iface = (IX*)this;} // end if// maybe IX?
if (iid==IID_IX)
{
cout << "Requesting IX interface" << endl;
*iface = (IX*)this;} // end if
else // maybe IY
if (iid==IID_IY)
{
cout << "Requesting IY interface" << endl;
*iface = (IY*)this;} // end if
else
{ // cant find it!
cout << "Requesting unknown interaface!" << endl;
*iface = NULL;
return(E_NOINTERFACE);
} // end else// if everything went well cast pointer to IUnknown and call addref()
((IUnknown *)(*iface))->AddRef();return(S_OK);} // end QueryInterface