| In: |
win32ole/win32ole.c
|
| Parent: | Object |
WIN32OLE.ole_classes(typelibrary)
Returns array of WIN32OLE_TYPE objects defined by type library.
/*
* WIN32OLE.ole_classes(typelibrary)
* ----
* Returns array of WIN32OLE_TYPE objects defined by type library.
*/
static VALUE
foletype_s_ole_classes(self, typelib)
VALUE self;
VALUE typelib;
{
VALUE file, classes;
OLECHAR * pbuf;
ITypeLib *pTypeLib;
HRESULT hr;
rb_secure(4);
classes = rb_ary_new();
if(TYPE(typelib) == T_STRING) {
file = typelib_file(typelib);
if (file == Qnil) {
file = typelib;
}
pbuf = ole_mb2wc(StringValuePtr(file), -1);
hr = LoadTypeLibEx(pbuf, REGKIND_NONE, &pTypeLib);
if (FAILED(hr))
ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to LoadTypeLibEx");
SysFreeString(pbuf);
ole_classes_from_typelib(pTypeLib, classes);
OLE_RELEASE(pTypeLib);
} else {
rb_raise(rb_eTypeError, "1st argument should be TypeLib string");
}
return classes;
}
Returns array of ProgID.
/*
* WIN32OLE_TYPE.progids
* ---
* Returns array of ProgID.
*/
static VALUE
foletype_s_progids(self)
VALUE self;
{
HKEY hclsids, hclsid;
DWORD i;
LONG err;
VALUE clsid;
VALUE v = rb_str_new2("");
VALUE progids = rb_ary_new();
err = reg_open_key(HKEY_CLASSES_ROOT, "CLSID", &hclsids);
if(err != ERROR_SUCCESS) {
return progids;
}
for(i = 0; ; i++) {
clsid = reg_enum_key(hclsids, i);
if (clsid == Qnil)
break;
err = reg_open_vkey(hclsids, clsid, &hclsid);
if (err != ERROR_SUCCESS)
continue;
if ((v = reg_get_val(hclsid, "ProgID")) != Qnil)
rb_ary_push(progids, v);
if ((v = reg_get_val(hclsid, "VersionIndependentProgID")) != Qnil)
rb_ary_push(progids, v);
RegCloseKey(hclsid);
}
RegCloseKey(hclsids);
return progids;
}
Returns array of type libraries.
/*
* 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;
}
Returns GUID.
/*
* WIN32OLE_TYPE#guid
* ----
* Returns GUID.
*/
static VALUE
foletype_guid(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_guid(ptype->pTypeInfo);
}
Returns helpcontext.
/*
* WIN32OLE_TYPE#helpcontext
* ---
* Returns helpcontext.
*/
static VALUE
foletype_helpcontext(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_helpcontext(ptype->pTypeInfo);
}
Returns helpfile
/*
* WIN32OLE_TYPE#helpfile
* ----
* Returns helpfile
*/
static VALUE
foletype_helpfile(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_helpfile(ptype->pTypeInfo);
}
Returns help string.
/*
* WIN32OLE_TYPE#helpstring
* ---
* Returns help string.
*/
static VALUE
foletype_helpstring(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_helpstring(ptype->pTypeInfo);
}
Returns major version.
/*
* WIN32OLE_TYPE#major_version
* ----
* Returns major version.
*/
static VALUE
foletype_major_version(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_major_version(ptype->pTypeInfo);
}
Returns minor version.
/*
* WIN32OLE_TYPE#minor_version
* ----
* Returns minor version.
*/
static VALUE
foletype_minor_version(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_minor_version(ptype->pTypeInfo);
}
Returns name.
/*
* WIN32OLE_TYPE#name
* ---
* Returns name.
*/
static VALUE
foletype_name(self)
VALUE self;
{
return rb_ivar_get(self, rb_intern("name"));
}
Returns array of WIN32OLE_METHOD objects.
/*
* WIN32OLE_TYPE#ole_methods
* ----
* Returns array of WIN32OLE_METHOD objects.
*/
static VALUE
foletype_methods(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_methods_from_typeinfo(ptype->pTypeInfo, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);
}
returns type of class.
/*
* WIN32OLE_TYPE#ole_type
* ----
* returns type of class.
*/
static VALUE
foletype_ole_type(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_ole_type(ptype->pTypeInfo);
}
Returns ProgID if it exists. If not found, then returns nil.
/*
* WIN32OLE_TYPE#progid
* ----
* Returns ProgID if it exists. If not found, then returns nil.
*/
static VALUE
foletype_progid(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_progid(ptype->pTypeInfo);
}
Returns source class when the OLE class is ‘Alias’.
/*
* WIN32OLE_TYPE#src_type
* ----
* Returns source class when the OLE class is 'Alias'.
*/
static VALUE
foletype_src_type(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_src_type(ptype->pTypeInfo);
}
Returns number which represents type.
/*
* WIN32OLE_TYPE#typekind
* ----
* Returns number which represents type.
*/
static VALUE
foletype_typekind(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_typekind(ptype->pTypeInfo);
}
Returns array of variables defined in OLE class.
/*
* WIN32OLE_TYPE#variables
* ----
* Returns array of variables defined in OLE class.
*/
static VALUE
foletype_variables(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_variables(ptype->pTypeInfo);
}
WIN32OLE_TYPE#visible
returns true if the OLE class is public.
/*
* WIN32OLE_TYPE#visible
* ----
* returns true if the OLE class is public.
*/
static VALUE
foletype_visible(self)
VALUE self;
{
struct oletypedata *ptype;
Data_Get_Struct(self, struct oletypedata, ptype);
return ole_type_visible(ptype->pTypeInfo);
}