社区
ATL
帖子详情
BindToStorage和BindToObject的区别是什么
wsxqaz
2009-10-08 06:33:24
我发现有的接口用BindToObject返回时空的指针,但是用BindToStorage每次都能正确返回指针?
...全文
561
7
打赏
收藏
BindToStorage和BindToObject的区别是什么
我发现有的接口用BindToObject返回时空的指针,但是用BindToStorage每次都能正确返回指针?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
雪影
2009-10-10
打赏
举报
回复
ls的理解基本正确
查看一下msdn中的说明
IMoniker::BindToStorage
Retrieves an interface pointer to the storage that contains the object identified by the moniker. Unlike the IMoniker::BindToObject method, this method does not activate the object identified by the moniker.
BindToStorage函数并不会创建一个别名对应的对象。而BindToObject函数会根据需要创建一个对象处理
wsxqaz
2009-10-10
打赏
举报
回复
我可否这么理解,BindToObject会复制出一个独立的拷贝出来,而调用BindToStorage会使用他本身的东西?
crystal_dark
2009-10-10
打赏
举报
回复
Up
crystal_dark
2009-10-10
打赏
举报
回复
Up
an_bachelor
2009-10-10
打赏
举报
回复
后者会尝试激活Moniker 前者不会
wshcdr
2009-10-08
打赏
举报
回复
Up
directshow USB摄像头预览
//指定视频采集设备的友好名字,为它创建一个Filter IBaseFilter * CTestPreviewDlg::CreateVideoDevice(const char * inFriendlyName) { return CreateHardwareFilter(CLSID_VideoInputDeviceCategory,inFriendlyName); } //根据设备的友好名字,创建一个代表该设备的Filter IBaseFilter * CTestPreviewDlg::CreateHardwareFilter(GUID inCategory,const char * inFriendlyName) { //创建一个系统枚举组件对象 ICreateDevEnum * enumHardware = NULL; HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum,NULL,CLSCTX_ALL, IID_ICreateDevEnum,(void**)&enumHardware); if(FAILED(hr)) { return NULL; } IBaseFilter * hardwareFilter = NULL; IEnumMoniker * enumMoniker = NULL; //为指定的目录创建枚举器 hr = enumHardware->CreateClassEnumerator(inCategory,&enumMoniker,0); if(enumMoniker) { enumMoniker->Reset(); ULONG fetched = 0; IMoniker * moniker = NULL; char friendlyName[256]; //枚举得到该目录下所有的设备,逐个进行名字匹配 while(!hardwareFilter && SUCCEEDED(enumMoniker->Next(1,&moniker, &fetched)) && fetched) { if(moniker) { IPropertyBag * propertyBag = NULL; VARIANT name; friendlyName[0] = 0; hr = moniker->
Bin
dTo
Storage
(0,0,IID_IPropertyBag,(void**)&propertyBag); //读取设备的友好名字 if(SUCCEEDED(hr)) { name.vt = VT_BSTR; hr = propertyBag->Read(L"Friendlyname",&name,NULL); } if(SUCCEEDED(hr)) { WideCharToMultiByte(CP_ACP,0,name.bstrVal,-1, friendlyName,256,NULL,NULL); //如果当前设备的友好名字与用户指定的设备名字相同, //则将当前设备标识绑定为Filter形式 if(strcmp(friendlyName,inFriendlyName) == 0) { moniker->
Bin
dTo
Object
(0,0,IID_IBaseFilter, (void**)&hardwareFilter); } } //释放使用过的接口 if(propertyBag) { propertyBag->Release(); propertyBag = NULL; } moniker->Release(); } } enumMoniker->Release(); } enumHardware->Release(); return hardwareFilter; }
COM原理及应用----命名和绑定技术
1、COM对象的创建方法 客户程序可以通过CoCreateInstance函数创建COM,在创建之前必须知道对象的一些基本情况,比如对象的CLSID或者对象的ProgID。 另一种对象创建方法是通过名字对象(moniker)创建,就是利用对象命名和绑定技术(即名字技术)。2、名字技术的地位 名字技术算不上COM的基本核心,但也是COM体系结构中重要的组成部分
[转帖]外壳命名空间扩展
一般介绍 很多人一定用过ZipMagic,对它能把一个压缩文件映射成文件夹感到很奇怪,不知道它使用了什么技术,实际上它用到的技术就是实现了一个外壳的命名空间扩展(Shell Namespace Extention)。 文件夹和视图:资源管理器的基本结构 资源管理器的界面显示为两部分:左边显示的是对象在外壳命名空间的位置,它们是以树结构显示的,通常认为左边显示的应该是...
获取Filter的三种途径 收藏
获取Filter的三种途径 收藏 一、通过CLSIDview plaincopy to clipboardprint?IBaseFilter *pF = 0; HRESULT hr = CoCre
《COM原理及应用》学习笔记之第八章
第八章 命名和绑定技术1、COM对象的创建方法 客户程序可以通过CoCreateInstance函数创建COM,在创建之前必须知道对象的一些基本情况,比如对象的CLSID或者对象的ProgID。 另一种对象创建方法是通过名字对象(moniker)创建,就是利用对象命名和绑定技术(即名字技术)。 2、名字技术的地位 名字技术算不上COM的基
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章