com 名字对象(3)使用IMoniker

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

一.名字对象比较

Hash和IsEqual方法

IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
DWORD dw;
moniker2->Hash(&dw);
IMoniker* moniker3=NULL;
CreateFileMoniker(OLESTR("F:\\test2.xlsx"),&moniker3);
DWORD dw2;
moniker3->Hash(&dw2);
HRESULT hr= moniker2->IsEqual(moniker3);

IsRunning说明对象是否在运行,GetTimeOfLastChange获取对象最后一次修改时间

IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
FILETIME ft;
moniker3->GetTimeOfLastChange(bindCtx,NULL,&ft);
hr=moniker3->IsRunning(bindCtx,NULL,NULL);

二.管理复合名字对象

1.Inverse返回名字对象的逆名字对象

IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
IMoniker* moniker3=NULL;
CreateItemMoniker(OLESTR("!"),OLESTR("Sheet1"),&moniker3);
IMoniker* moniker4=NULL;
CreateGenericComposite(moniker2,moniker3,&moniker4);
LPOLESTR str;
IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
moniker4->GetDisplayName(bindCtx,NULL,&str);
IMoniker* moniker5=NULL;
moniker4->Inverse(&moniker5);
LPOLESTR str2;
moniker5->GetDisplayName(bindCtx,NULL,&str2);

原文件名字对象:F:\test.xlsx!Sheet1
逆名字对象:\..\..

2.IsSystemMoniker返回名字对象的类型

DWORD monikerType;
IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
moniker2->IsSystemMoniker(&monikerType);

 

typedef 
enum tagMKSYS
    {    MKSYS_NONE    = 0,
    MKSYS_GENERICCOMPOSITE    = 1,
    MKSYS_FILEMONIKER    = 2,
    MKSYS_ANTIMONIKER    = 3,
    MKSYS_ITEMMONIKER    = 4,
    MKSYS_POINTERMONIKER    = 5,
    MKSYS_CLASSMONIKER    = 7,
    MKSYS_OBJREFMONIKER    = 8,
    MKSYS_SESSIONMONIKER    = 9,
    MKSYS_LUAMONIKER    = 10
    }     MKSYS;

三.反-名字对象(CreateAntiMoniker)

在创建自定义名字对象时菜会用到这种名字对象.暂时不深究

四.三个处理FILETIME的函数

HRESULT CoFileTimeNow(
  FILETIME * lpFileTime
);

BOOL CoDosDateTimeToFileTime(
  WORD nDosDate,
  WORD nDosTime,
  FILETIME * lpFileTime
);

BOOL CoFileTimeToDosDateTime(
  FILETIME * lpFileTime,
  LPWORD lpDosDate,
  LPWORD lpDosTime
);

COM对象与其基础RCW分开后就不能再使用

RCW是一个.NET和COM之间的桥梁,上述错误就是在于COM那一段的陆地消失了,你再想走着这桥,系统就报错了, 这种问题多半是COM对象被意外销毁或者没有抛出异常就崩溃导致。  解决问...
  • wmg494005678
  • wmg494005678
  • 2013年02月18日 11:12
  • 14117

COM组件开发(一)—— 对象与接口

一.前言        在COM规范中,最基本的两个要素就是对象与接口,因为COM就是由这两者来共同实现的。COM对象在组件中是被封装起来的,客户代码只能通过接口来访问COM对象并享受其,由于客户与C...
  • q5806622
  • q5806622
  • 2015年01月19日 23:08
  • 3486

VirtualBox COM获取对象失败

错误详情 1. 先来看看错误详情 获取 VirtualBox COM 对象失败.应用程序将被中断.Failed to instantiate CLSID_VirtualBox ...
  • zp_00000
  • zp_00000
  • 2017年04月17日 09:04
  • 12807

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

1.文件名字对象 IUnknown* pUnk = NULL; IMoniker* moniker2=NULL; CreateFileMoniker(OLESTR("E:\\test.xlsx"...
  • lambition
  • lambition
  • 2012年03月30日 14:56
  • 883

Inside COM (深入组件对象模型) ch1&2&3

  • 2009年11月28日 05:58
  • 14.75MB
  • 下载

什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha"); } ...
  • swift2010
  • swift2010
  • 2018年01月01日 00:39
  • 48

Barcode Xpress 教程:如何在Visual C++ 中作为COM 对象使用

  • 2013年09月30日 14:46
  • 297KB
  • 下载

com对象在易语言中的使用

  • 2014年05月07日 23:07
  • 142KB
  • 下载

使用MFC和晚绑定创建COM对象

  • 2009年10月27日 16:24
  • 648KB
  • 下载

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

56385 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] WARN  com.mchange.v2.resourc...
  • qq_35034912
  • qq_35034912
  • 2016年12月20日 20:49
  • 1526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:com 名字对象(3)使用IMoniker
举报原因:
原因补充:

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