typelibs()
public
Returns array of type libraries.
Show source
/*
* call-seq:
* WIN32OLE_TYPE.typelibs
*
* Returns array of type libraries.
*
*/
static VALUE
foletype_s_typelibs(self)
VALUE self;
{
HKEY htypelib, hclsid;
double fversion;
DWORD i, j;
LONG err;
VALUE clsid;
VALUE ver;
VALUE v = Qnil;
VALUE typelibs = rb_ary_new();
err = reg_open_key(HKEY_CLASSES_ROOT, "TypeLib", &htypelib);
if(err != ERROR_SUCCESS) {
return typelibs;
}
for(i = 0; ; i++) {
clsid = reg_enum_key(htypelib, i);
if (clsid == Qnil)
break;
err = reg_open_vkey(htypelib, clsid, &hclsid);
if (err != ERROR_SUCCESS)
continue;
fversion = 0;
for(j = 0; ; j++) {
ver = reg_enum_key(hclsid, j);
if (ver == Qnil)
break;
if (fversion > atof(StringValuePtr(ver)))
continue;
fversion = atof(StringValuePtr(ver));
if ( (v = reg_get_val(hclsid, StringValuePtr(ver))) != Qnil ) {
rb_ary_push(typelibs, v);
}
}
RegCloseKey(hclsid);
}
RegCloseKey(htypelib);
return typelibs;
}