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