Here is the demo for extract all the constants from associated typelib. I will 
add this function in next version.
    
    
    import winim.com
    
    let word = CreateObject("Word.Application")
    var disp = word.unwarp
    
    var tinfo: ptr ITypeInfo
    var tlib: ptr ITypeLib
    var index: UINT
    var kind: TYPEKIND
    
    disp.GetTypeInfo(0, 0, addr tinfo)
    tinfo.GetContainingTypeLib(addr tlib, addr index)
    tlib.GetTypeInfoCount()
    
    for i in 0..<tlib.GetTypeInfoCount():
      tlib.GetTypeInfoType(UINT i, addr kind)
      if kind == TKIND_ENUM:
        var tinfoEnum: ptr ITypeInfo
        var attr: ptr TYPEATTR
        var desc: ptr VARDESC
        var name: BSTR
        var nameCount: UINT
        
        tlib.GetTypeInfo(UINT i, addr tinfoEnum)
        tinfoEnum.GetTypeAttr(addr attr)
        for j in 0..<int attr.cVars:
          tinfoEnum.GetVarDesc(UINT j, addr desc)
          if desc.varkind == VAR_CONST:
            tinfoEnum.GetNames(desc.memid, addr name, 1, addr nameCount)
            echo $name, " = ", desc[].lpvarValue[].toVariant
    
    word.Quit
    
    COM_FullRelease()
    
    
    Run

Reply via email to