com 名字对象(2)创建名字对象(IMoniker)

转载 2012年03月30日 14:56:04

1.文件名字对象

IUnknown* pUnk = NULL;
IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("E:\\test.xlsx"),&moniker2);
//another way(bind) to get IUnknown
//get pUnk from moniker2
hr =moniker2->BindToObject(bindCtx,NULL,IID_IUnknown, (void**)&pUnk);

2.单项名字对象

IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("E:\\test.xlsx"),&moniker2);
IMoniker* moniker3=NULL;
CreateItemMoniker(OLESTR("!"),OLESTR("Sheet1"),&moniker3);


3.根据显示名创建名字对象

const OLECHAR bb[]=OLESTR("clsid:120B72A0-65BF-11D0-9DDC-00A0C9034892");
IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
ULONG cchEaten; 
IMoniker* moniker2=NULL;
hr=MkParseDisplayName(bindCtx,bb,&cchEaten,&moniker2);
IClassFactory* cf=0;
hr=moniker2->BindToObject(bindCtx,NULL,IID_IClassFactory,(void**)&cf);
hr=cf->CreateInstance(0,IID_IUnknown,(void**)&pUnk);

以上代码跟下面效果是一样的

CoCreateInstance(CLSID_DuckDoer, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pUnk);

IMoniker用BindToObject创建组件对象

4.创建类名字对象(CreateClassMoniker)

IMoniker* moniker2=NULL;
//const OLECHAR bb[]=OLESTR("clsid:120B72A0-65BF-11D0-9DDC-00A0C9034892");
//ULONG cchEaten; 
//hr=MkParseDisplayName(bindCtx,bb,&cchEaten,&moniker2);
hr=CreateClassMoniker(CLSID_DuckDoer,&moniker2);

CreateClassMoniker可以根据CLSID来创建,与注释掉部分效果相同

5.创建名字复合对象

CreateFileMoniker(OLESTR("E:\\test.xlsx!Sheet1!R1C1:R2C2"),&moniker2);
IMoniker* moniker3=NULL;
CreateItemMoniker(OLESTR("!"),OLESTR("Sheet1"),&moniker3);
IMoniker* moniker4=NULL;
CreateGenericComposite(moniker2,moniker3,&moniker4);

可以将一个文件名字对象和单项名字对象组合成一个复合名字对象,单项名字对象单独存在并无价值

6.创建指针名字对象

可以基于一个现有的IUnknown 接口指针创建名字对象

HRESULT hr;
IUnknown* pUnk = NULL;
hr = CoCreateInstance(CLSID_DuckDoer, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pUnk);
IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
IMoniker* moniker2=NULL;
CreatePointerMoniker(pUnk,&moniker2);
IConnectionPointContainer* pConnPtContainer = NULL;
IConnectionPointContainer* pConnPtContainer2 = NULL;
pUnk->QueryInterface(IID_IConnectionPointContainer, (void**)&pConnPtContainer2);
//equal
moniker2->BindToObject(bindCtx,NULL,IID_IConnectionPointContainer,(void**)&pConnPtContainer);

7.获取文件相关联的CLSID(GetClassFile)

并非每种类型的文件都有相关联的CLSID

IMoniker* moniker2=NULL;
CLSID fileId;
GetClassFile(OLESTR("E:\\test.xlsx"),&fileId);
CreateClassMoniker(fileId,&moniker2);

参考:http://wenku.baidu.com/view/d946e41eb7360b4c2e3f64b1.html

8.CoGetObject

CoGetObject是对第3步的封装

const OLECHAR bb[]=OLESTR("clsid:120B72A0-65BF-11D0-9DDC-00A0C9034892");
IClassFactory* cf = NULL;
CoGetObject(bb,0,IID_IClassFactory, (void**)&cf);
IUnknown* pUnk = NULL;
cf->CreateInstance(0,IID_IUnknown,(void**)&pUnk);

相关文章推荐

COM原理及应用----命名和绑定技术

1、COM对象的创建方法        客户程序可以通过CoCreateInstance函数创建COM,在创建之前必须知道对象的一些基本情况,比如对象的CLSID或者对象的ProgID。     ...

D3D11之HLSL常见问题和调试方法总结

用D3D11有一小段时间了,感觉在以前的教程章节也是散乱的写关于HLSL的总结,不过以前的我感觉有点不太对,这里我重新整理一下子 第一,HLSL错误类型。 HLSL错误两类两大类: 第一,加载sh...

HLSL编译工具—FXC

声明:   ©  2012  刘邓   hfutld@yeah.net. All rights reserved.  翻译说明:   1."/"    这个符号出现在我翻译一个单...

java如何在文件中读取一个字符串并创建以这个字符为名字的类的对象

我们一般用properties或者XML文件作为资源存储的文件,现在主要介绍一下对properties的操作 1.我们在src文件下新建一个名称为config的包 2.在config下新建一个...

python的对象与名字绑定-----------好!

此文装载,对于理解python中的三个重要概念:名字、绑定和对象,以及python的思想和一些内部实现机制都很有帮助。见下: i = 1   这是一个再简单不过的赋值语句,即便...
  • yockie
  • yockie
  • 2013年01月06日 19:40
  • 1894

用java面向对象的内容建立学生姓名,学号,id,班级,每一科的成绩,以及对管理员实现(对老师只实现查看):通过名字查询成绩,通过学号查询成绩,通过id修改姓名,通过姓名修改成绩

这个问题如果用jsp和数据库的内容做那会非常简单,那么只用java面向对象来做呢?问题分析:本题首先需要建1.学生类2.班级类3.科目类4.对管理员和老师的接口(因为只有方法没有属性,用接口会简单一些...

Python进阶 - 对象,名字以及绑定

本文详细介绍了Python中的对象,名字,以及绑定

Python中对象与名字的绑定

i = 1   这是一个再简单不过的赋值语句,即便是才开始学习编程的新手也能脱口而出它的含义 -- “设置变量i的值为1”。 i = 2   “将变量i的值改为2”,当看到接下来这行代码时,你脑...
  • tmackan
  • tmackan
  • 2013年05月19日 10:05
  • 620

前端复习--javascript 对象作为对象的属性名字的研究

问题提出: 解释下面的输出结果 var a={}, b={key:'b'}, c={key:'c'}; a[b]=123; a[c]=456; console.log(a[b]); //...

在数据库连接名跟密码还有数据库名字也正确的时候报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied fo

56385 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] WARN  com.mchange.v2.resourc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com 名字对象(2)创建名字对象(IMoniker)
举报原因:
原因补充:

(最多只允许输入30个字)