代码改变世界

com 名字对象(3)使用IMoniker

  Clingingboy  阅读(1967)  评论(0编辑  收藏  举报

 

一.名字对象比较

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
);

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2007-08-01 vs2008支持ajax extender控件
2006-08-01 asp.net控件开发基础(2)
点击右上角即可分享
微信分享提示