• com 名字对象(3)使用IMoniker


    一.名字对象比较

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

  • 相关阅读:
    Git笔记
    Android笔记
    个人人生警示
    Java 注解
    JAVA面试题
    kotlin学习笔记
    Android Studio之gradle和gradle插件
    gcc在Linux下编译so文件出错 jni.h: no such file or directory
    apktool新官网地址
    Vim 使用记录
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2124280.html
Copyright © 2020-2023  润新知