* ext/win32ole/win32ole.c: seperate WIN32OLE_VARIABLE src from
win32ole.c * ext/win32ole/win32ole.h: ditto. * ext/win32ole/win32ole_variable.c: ditto. * ext/win32ole/win32ole_variable.h: ditto. * ext/win32ole/depend: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4ce3e118e7
commit
0aa9e15ea0
@ -1,3 +1,12 @@
|
|||||||
|
Mon Aug 11 20:47:27 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||||||
|
|
||||||
|
* ext/win32ole/win32ole.c: seperate WIN32OLE_VARIABLE src from
|
||||||
|
win32ole.c
|
||||||
|
* ext/win32ole/win32ole.h: ditto.
|
||||||
|
* ext/win32ole/win32ole_variable.c: ditto.
|
||||||
|
* ext/win32ole/win32ole_variable.h: ditto.
|
||||||
|
* ext/win32ole/depend: ditto.
|
||||||
|
|
||||||
Mon Aug 11 16:17:21 2014 Tony Miller <mcfiredrill@gmail.com>
|
Mon Aug 11 16:17:21 2014 Tony Miller <mcfiredrill@gmail.com>
|
||||||
|
|
||||||
* dir.c (rb_dir_exists_p): [DOC] Document that Dir.exists? is
|
* dir.c (rb_dir_exists_p): [DOC] Document that Dir.exists? is
|
||||||
|
@ -3,4 +3,5 @@ win32ole.o : win32ole.c $(WIN32OLE_HEADERS)
|
|||||||
win32ole_variant_m.o : win32ole_variant_m.c $(WIN32OLE_HEADERS)
|
win32ole_variant_m.o : win32ole_variant_m.c $(WIN32OLE_HEADERS)
|
||||||
win32ole_typelib.o : win32ole_typelib.c $(WIN32OLE_HEADERS)
|
win32ole_typelib.o : win32ole_typelib.c $(WIN32OLE_HEADERS)
|
||||||
win32ole_type.o : win32ole_type.c $(WIN32OLE_HEADERS)
|
win32ole_type.o : win32ole_type.c $(WIN32OLE_HEADERS)
|
||||||
|
win32ole_variable.o : win32ole_variable.c $(WIN32OLE_HEADERS)
|
||||||
win32ole_error.o : win32ole_error.c $(WIN32OLE_HEADERS)
|
win32ole_error.o : win32ole_error.c $(WIN32OLE_HEADERS)
|
||||||
|
@ -157,18 +157,12 @@ struct oledata {
|
|||||||
IDispatch *pDispatch;
|
IDispatch *pDispatch;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct olevariabledata {
|
|
||||||
ITypeInfo *pTypeInfo;
|
|
||||||
UINT index;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct olemethoddata {
|
struct olemethoddata {
|
||||||
ITypeInfo *pOwnerTypeInfo;
|
ITypeInfo *pOwnerTypeInfo;
|
||||||
ITypeInfo *pTypeInfo;
|
ITypeInfo *pTypeInfo;
|
||||||
UINT index;
|
UINT index;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct oleparamdata {
|
struct oleparamdata {
|
||||||
ITypeInfo *pTypeInfo;
|
ITypeInfo *pTypeInfo;
|
||||||
UINT method_index;
|
UINT method_index;
|
||||||
@ -219,7 +213,6 @@ static VALUE ole_excepinfo2msg(EXCEPINFO *pExInfo);
|
|||||||
static void ole_msg_loop(void);
|
static void ole_msg_loop(void);
|
||||||
static void ole_free(struct oledata *pole);
|
static void ole_free(struct oledata *pole);
|
||||||
static void olemethod_free(struct olemethoddata *polemethod);
|
static void olemethod_free(struct olemethoddata *polemethod);
|
||||||
static void olevariable_free(struct olevariabledata *polevar);
|
|
||||||
static void oleparam_free(struct oleparamdata *pole);
|
static void oleparam_free(struct oleparamdata *pole);
|
||||||
static LPWSTR ole_mb2wc(char *pm, int len);
|
static LPWSTR ole_mb2wc(char *pm, int len);
|
||||||
static VALUE ole_ary_m_entry(VALUE val, LONG *pid);
|
static VALUE ole_ary_m_entry(VALUE val, LONG *pid);
|
||||||
@ -237,13 +230,11 @@ static void ole_val2ptr_variant(VALUE val, VARIANT *var);
|
|||||||
static void ole_set_byref(VARIANT *realvar, VARIANT *var, VARTYPE vt);
|
static void ole_set_byref(VARIANT *realvar, VARIANT *var, VARTYPE vt);
|
||||||
static void ole_val2olevariantdata(VALUE val, VARTYPE vt, struct olevariantdata *pvar);
|
static void ole_val2olevariantdata(VALUE val, VARTYPE vt, struct olevariantdata *pvar);
|
||||||
static void ole_val2variant2(VALUE val, VARIANT *var);
|
static void ole_val2variant2(VALUE val, VARIANT *var);
|
||||||
static VALUE make_inspect(const char *class_name, VALUE detail);
|
|
||||||
static VALUE ole_set_member(VALUE self, IDispatch *dispatch);
|
static VALUE ole_set_member(VALUE self, IDispatch *dispatch);
|
||||||
static VALUE fole_s_allocate(VALUE klass);
|
static VALUE fole_s_allocate(VALUE klass);
|
||||||
static VALUE create_win32ole_object(VALUE klass, IDispatch *pDispatch, int argc, VALUE *argv);
|
static VALUE create_win32ole_object(VALUE klass, IDispatch *pDispatch, int argc, VALUE *argv);
|
||||||
static VALUE ary_new_dim(VALUE myary, LONG *pid, LONG *plb, LONG dim);
|
static VALUE ary_new_dim(VALUE myary, LONG *pid, LONG *plb, LONG dim);
|
||||||
static void ary_store_dim(VALUE myary, LONG *pid, LONG *plb, LONG dim, VALUE val);
|
static void ary_store_dim(VALUE myary, LONG *pid, LONG *plb, LONG dim, VALUE val);
|
||||||
static VALUE ole_variant2val(VARIANT *pvar);
|
|
||||||
static void ole_const_load(ITypeLib *pTypeLib, VALUE klass, VALUE self);
|
static void ole_const_load(ITypeLib *pTypeLib, VALUE klass, VALUE self);
|
||||||
static HRESULT clsid_from_remote(VALUE host, VALUE com, CLSID *pclsid);
|
static HRESULT clsid_from_remote(VALUE host, VALUE com, CLSID *pclsid);
|
||||||
static VALUE ole_create_dcom(int argc, VALUE *argv, VALUE self);
|
static VALUE ole_create_dcom(int argc, VALUE *argv, VALUE self);
|
||||||
@ -301,20 +292,6 @@ static VALUE ole_usertype2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE t
|
|||||||
static VALUE ole_ptrtype2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails);
|
static VALUE ole_ptrtype2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails);
|
||||||
static VALUE fole_method_help(VALUE self, VALUE cmdname);
|
static VALUE fole_method_help(VALUE self, VALUE cmdname);
|
||||||
static VALUE fole_activex_initialize(VALUE self);
|
static VALUE fole_activex_initialize(VALUE self);
|
||||||
static VALUE folevariable_name(VALUE self);
|
|
||||||
static VALUE ole_variable_ole_type(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_ole_type(VALUE self);
|
|
||||||
static VALUE ole_variable_ole_type_detail(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_ole_type_detail(VALUE self);
|
|
||||||
static VALUE ole_variable_value(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_value(VALUE self);
|
|
||||||
static VALUE ole_variable_visible(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_visible(VALUE self);
|
|
||||||
static VALUE ole_variable_kind(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_variable_kind(VALUE self);
|
|
||||||
static VALUE ole_variable_varkind(ITypeInfo *pTypeInfo, UINT var_index);
|
|
||||||
static VALUE folevariable_varkind(VALUE self);
|
|
||||||
static VALUE folevariable_inspect(VALUE self);
|
|
||||||
static VALUE olemethod_set_member(VALUE self, ITypeInfo *pTypeInfo, ITypeInfo *pOwnerTypeInfo, int index, VALUE name);
|
static VALUE olemethod_set_member(VALUE self, ITypeInfo *pTypeInfo, ITypeInfo *pOwnerTypeInfo, int index, VALUE name);
|
||||||
static VALUE folemethod_s_allocate(VALUE klass);
|
static VALUE folemethod_s_allocate(VALUE klass);
|
||||||
static VALUE folemethod_initialize(VALUE self, VALUE oletype, VALUE method);
|
static VALUE folemethod_initialize(VALUE self, VALUE oletype, VALUE method);
|
||||||
@ -1066,13 +1043,6 @@ olemethod_free(struct olemethoddata *polemethod)
|
|||||||
free(polemethod);
|
free(polemethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
olevariable_free(struct olevariabledata *polevar)
|
|
||||||
{
|
|
||||||
OLE_FREE(polevar->pTypeInfo);
|
|
||||||
free(polevar);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
oleparam_free(struct oleparamdata *pole)
|
oleparam_free(struct oleparamdata *pole)
|
||||||
{
|
{
|
||||||
@ -1080,7 +1050,6 @@ oleparam_free(struct oleparamdata *pole)
|
|||||||
free(pole);
|
free(pole);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LPWSTR
|
LPWSTR
|
||||||
ole_vstr2wc(VALUE vstr)
|
ole_vstr2wc(VALUE vstr)
|
||||||
{
|
{
|
||||||
@ -1841,7 +1810,7 @@ ole_val2variant2(VALUE val, VARIANT *var)
|
|||||||
g_nil_to = VT_ERROR;
|
g_nil_to = VT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
VALUE
|
||||||
make_inspect(const char *class_name, VALUE detail)
|
make_inspect(const char *class_name, VALUE detail)
|
||||||
{
|
{
|
||||||
VALUE str;
|
VALUE str;
|
||||||
@ -1926,7 +1895,7 @@ ary_store_dim(VALUE myary, LONG *pid, LONG *plb, LONG dim, VALUE val) {
|
|||||||
rb_ary_store(obj, id, val);
|
rb_ary_store(obj, id, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
VALUE
|
||||||
ole_variant2val(VARIANT *pvar)
|
ole_variant2val(VARIANT *pvar)
|
||||||
{
|
{
|
||||||
VALUE obj = Qnil;
|
VALUE obj = Qnil;
|
||||||
@ -4545,330 +4514,6 @@ fole_activex_initialize(VALUE self)
|
|||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Document-class: WIN32OLE_VARIABLE
|
|
||||||
*
|
|
||||||
* <code>WIN32OLE_VARIABLE</code> objects represent OLE variable information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
VALUE
|
|
||||||
create_win32ole_variable(ITypeInfo *pTypeInfo, UINT index, VALUE name)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
VALUE obj = Data_Make_Struct(cWIN32OLE_VARIABLE, struct olevariabledata,
|
|
||||||
0,olevariable_free,pvar);
|
|
||||||
pvar->pTypeInfo = pTypeInfo;
|
|
||||||
OLE_ADDREF(pTypeInfo);
|
|
||||||
pvar->index = index;
|
|
||||||
rb_ivar_set(obj, rb_intern("name"), name);
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#name
|
|
||||||
*
|
|
||||||
* Returns the name of variable.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.name}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* xlChart
|
|
||||||
* xlDialogSheet
|
|
||||||
* xlExcel4IntlMacroSheet
|
|
||||||
* xlExcel4MacroSheet
|
|
||||||
* xlWorksheet
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_name(VALUE self)
|
|
||||||
{
|
|
||||||
return rb_ivar_get(self, rb_intern("name"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_ole_type(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE type;
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
ole_raise(hr, eWIN32OLERuntimeError, "failed to GetVarDesc");
|
|
||||||
type = ole_typedesc2val(pTypeInfo, &(pVarDesc->elemdescVar.tdesc), Qnil);
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#ole_type
|
|
||||||
*
|
|
||||||
* Returns OLE type string.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.ole_type} #{variable.name}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* INT xlChart
|
|
||||||
* INT xlDialogSheet
|
|
||||||
* INT xlExcel4IntlMacroSheet
|
|
||||||
* INT xlExcel4MacroSheet
|
|
||||||
* INT xlWorksheet
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_ole_type(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_ole_type(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_ole_type_detail(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE type = rb_ary_new();
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
ole_raise(hr, eWIN32OLERuntimeError, "failed to GetVarDesc");
|
|
||||||
ole_typedesc2val(pTypeInfo, &(pVarDesc->elemdescVar.tdesc), type);
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#ole_type_detail
|
|
||||||
*
|
|
||||||
* Returns detail information of type. The information is array of type.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('DirectX 7 for Visual Basic Type Library', 'D3DCLIPSTATUS')
|
|
||||||
* variable = tobj.variables.find {|variable| variable.name == 'lFlags'}
|
|
||||||
* tdetail = variable.ole_type_detail
|
|
||||||
* p tdetail # => ["USERDEFINED", "CONST_D3DCLIPSTATUSFLAGS"]
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_ole_type_detail(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_ole_type_detail(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_value(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE val = Qnil;
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
return Qnil;
|
|
||||||
if(pVarDesc->varkind == VAR_CONST)
|
|
||||||
val = ole_variant2val(V_UNION1(pVarDesc, lpvarValue));
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#value
|
|
||||||
*
|
|
||||||
* Returns value if value is exists. If the value does not exist,
|
|
||||||
* this method returns nil.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.name} #{variable.value}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* xlChart = -4109
|
|
||||||
* xlDialogSheet = -4116
|
|
||||||
* xlExcel4IntlMacroSheet = 4
|
|
||||||
* xlExcel4MacroSheet = 3
|
|
||||||
* xlWorksheet = -4167
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_value(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_value(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_visible(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE visible = Qfalse;
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
return visible;
|
|
||||||
if (!(pVarDesc->wVarFlags & (VARFLAG_FHIDDEN |
|
|
||||||
VARFLAG_FRESTRICTED |
|
|
||||||
VARFLAG_FNONBROWSABLE))) {
|
|
||||||
visible = Qtrue;
|
|
||||||
}
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#visible?
|
|
||||||
*
|
|
||||||
* Returns true if the variable is public.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.name} #{variable.visible?}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* xlChart true
|
|
||||||
* xlDialogSheet true
|
|
||||||
* xlExcel4IntlMacroSheet true
|
|
||||||
* xlExcel4MacroSheet true
|
|
||||||
* xlWorksheet true
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_visible(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_visible(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_kind(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE kind = rb_str_new2("UNKNOWN");
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
return kind;
|
|
||||||
switch(pVarDesc->varkind) {
|
|
||||||
case VAR_PERINSTANCE:
|
|
||||||
kind = rb_str_new2("PERINSTANCE");
|
|
||||||
break;
|
|
||||||
case VAR_STATIC:
|
|
||||||
kind = rb_str_new2("STATIC");
|
|
||||||
break;
|
|
||||||
case VAR_CONST:
|
|
||||||
kind = rb_str_new2("CONSTANT");
|
|
||||||
break;
|
|
||||||
case VAR_DISPATCH:
|
|
||||||
kind = rb_str_new2("DISPATCH");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
return kind;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#variable_kind
|
|
||||||
*
|
|
||||||
* Returns variable kind string.
|
|
||||||
*
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.name} #{variable.variable_kind}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* xlChart CONSTANT
|
|
||||||
* xlDialogSheet CONSTANT
|
|
||||||
* xlExcel4IntlMacroSheet CONSTANT
|
|
||||||
* xlExcel4MacroSheet CONSTANT
|
|
||||||
* xlWorksheet CONSTANT
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_variable_kind(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_kind(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
ole_variable_varkind(ITypeInfo *pTypeInfo, UINT var_index)
|
|
||||||
{
|
|
||||||
VARDESC *pVarDesc;
|
|
||||||
HRESULT hr;
|
|
||||||
VALUE kind = Qnil;
|
|
||||||
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
|
||||||
if (FAILED(hr))
|
|
||||||
return kind;
|
|
||||||
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
|
||||||
kind = INT2FIX(pVarDesc->varkind);
|
|
||||||
return kind;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#varkind
|
|
||||||
*
|
|
||||||
* Returns the number which represents variable kind.
|
|
||||||
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
|
||||||
* variables = tobj.variables
|
|
||||||
* variables.each do |variable|
|
|
||||||
* puts "#{variable.name} #{variable.varkind}"
|
|
||||||
* end
|
|
||||||
*
|
|
||||||
* The result of above script is following:
|
|
||||||
* xlChart 2
|
|
||||||
* xlDialogSheet 2
|
|
||||||
* xlExcel4IntlMacroSheet 2
|
|
||||||
* xlExcel4MacroSheet 2
|
|
||||||
* xlWorksheet 2
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_varkind(VALUE self)
|
|
||||||
{
|
|
||||||
struct olevariabledata *pvar;
|
|
||||||
Data_Get_Struct(self, struct olevariabledata, pvar);
|
|
||||||
return ole_variable_varkind(pvar->pTypeInfo, pvar->index);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* WIN32OLE_VARIABLE#inspect -> String
|
|
||||||
*
|
|
||||||
* Returns the OLE variable name and the value with class name.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
folevariable_inspect(VALUE self)
|
|
||||||
{
|
|
||||||
VALUE detail = rb_funcall(self, rb_intern("to_s"), 0);
|
|
||||||
rb_str_cat2(detail, "=");
|
|
||||||
rb_str_concat(detail, rb_funcall(rb_funcall(self, rb_intern("value"), 0), rb_intern("inspect"), 0));
|
|
||||||
return make_inspect("WIN32OLE_VARIABLE", detail);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Document-class: WIN32OLE_METHOD
|
* Document-class: WIN32OLE_METHOD
|
||||||
*
|
*
|
||||||
@ -8127,17 +7772,7 @@ Init_win32ole(void)
|
|||||||
Init_win32ole_variant_m();
|
Init_win32ole_variant_m();
|
||||||
Init_win32ole_typelib();
|
Init_win32ole_typelib();
|
||||||
Init_win32ole_type();
|
Init_win32ole_type();
|
||||||
|
Init_win32ole_variable();
|
||||||
cWIN32OLE_VARIABLE = rb_define_class("WIN32OLE_VARIABLE", rb_cObject);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "name", folevariable_name, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "ole_type", folevariable_ole_type, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "ole_type_detail", folevariable_ole_type_detail, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "value", folevariable_value, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "visible?", folevariable_visible, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "variable_kind", folevariable_variable_kind, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "varkind", folevariable_varkind, 0);
|
|
||||||
rb_define_method(cWIN32OLE_VARIABLE, "inspect", folevariable_inspect, 0);
|
|
||||||
rb_define_alias(cWIN32OLE_VARIABLE, "to_s", "name");
|
|
||||||
|
|
||||||
cWIN32OLE_METHOD = rb_define_class("WIN32OLE_METHOD", rb_cObject);
|
cWIN32OLE_METHOD = rb_define_class("WIN32OLE_METHOD", rb_cObject);
|
||||||
rb_define_alloc_func(cWIN32OLE_METHOD, folemethod_s_allocate);
|
rb_define_alloc_func(cWIN32OLE_METHOD, folemethod_s_allocate);
|
||||||
|
@ -97,7 +97,6 @@
|
|||||||
#define OLE_RELEASE_TYPEATTR(X, Y) ((X)->lpVtbl->ReleaseTypeAttr((X), (Y)))
|
#define OLE_RELEASE_TYPEATTR(X, Y) ((X)->lpVtbl->ReleaseTypeAttr((X), (Y)))
|
||||||
|
|
||||||
VALUE cWIN32OLE;
|
VALUE cWIN32OLE;
|
||||||
VALUE cWIN32OLE_VARIABLE;
|
|
||||||
LCID cWIN32OLE_lcid;
|
LCID cWIN32OLE_lcid;
|
||||||
|
|
||||||
|
|
||||||
@ -119,12 +118,13 @@ HRESULT ole_docinfo_from_type(ITypeInfo *pTypeInfo, BSTR *name, BSTR *helpstr, D
|
|||||||
VALUE ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails);
|
VALUE ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails);
|
||||||
VALUE ole_typelib_from_itypeinfo(ITypeInfo *pTypeInfo);
|
VALUE ole_typelib_from_itypeinfo(ITypeInfo *pTypeInfo);
|
||||||
VALUE ole_type_from_itypeinfo(ITypeInfo *pTypeInfo);
|
VALUE ole_type_from_itypeinfo(ITypeInfo *pTypeInfo);
|
||||||
|
VALUE make_inspect(const char *class_name, VALUE detail);
|
||||||
VALUE create_win32ole_variable(ITypeInfo *pTypeInfo, UINT index, VALUE name);
|
VALUE ole_variant2val(VARIANT *pvar);
|
||||||
|
|
||||||
#include "win32ole_variant_m.h"
|
#include "win32ole_variant_m.h"
|
||||||
#include "win32ole_typelib.h"
|
#include "win32ole_typelib.h"
|
||||||
#include "win32ole_type.h"
|
#include "win32ole_type.h"
|
||||||
|
#include "win32ole_variable.h"
|
||||||
#include "win32ole_error.h"
|
#include "win32ole_error.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
366
ext/win32ole/win32ole_variable.c
Normal file
366
ext/win32ole/win32ole_variable.c
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
#include "win32ole.h"
|
||||||
|
|
||||||
|
struct olevariabledata {
|
||||||
|
ITypeInfo *pTypeInfo;
|
||||||
|
UINT index;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void olevariable_free(struct olevariabledata *polevar);
|
||||||
|
static VALUE folevariable_name(VALUE self);
|
||||||
|
static VALUE ole_variable_ole_type(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_ole_type(VALUE self);
|
||||||
|
static VALUE ole_variable_ole_type_detail(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_ole_type_detail(VALUE self);
|
||||||
|
static VALUE ole_variable_value(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_value(VALUE self);
|
||||||
|
static VALUE ole_variable_visible(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_visible(VALUE self);
|
||||||
|
static VALUE ole_variable_kind(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_variable_kind(VALUE self);
|
||||||
|
static VALUE ole_variable_varkind(ITypeInfo *pTypeInfo, UINT var_index);
|
||||||
|
static VALUE folevariable_varkind(VALUE self);
|
||||||
|
static VALUE folevariable_inspect(VALUE self);
|
||||||
|
|
||||||
|
static void
|
||||||
|
olevariable_free(struct olevariabledata *polevar)
|
||||||
|
{
|
||||||
|
OLE_FREE(polevar->pTypeInfo);
|
||||||
|
free(polevar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Document-class: WIN32OLE_VARIABLE
|
||||||
|
*
|
||||||
|
* <code>WIN32OLE_VARIABLE</code> objects represent OLE variable information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
create_win32ole_variable(ITypeInfo *pTypeInfo, UINT index, VALUE name)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
VALUE obj = Data_Make_Struct(cWIN32OLE_VARIABLE, struct olevariabledata,
|
||||||
|
0,olevariable_free,pvar);
|
||||||
|
pvar->pTypeInfo = pTypeInfo;
|
||||||
|
OLE_ADDREF(pTypeInfo);
|
||||||
|
pvar->index = index;
|
||||||
|
rb_ivar_set(obj, rb_intern("name"), name);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#name
|
||||||
|
*
|
||||||
|
* Returns the name of variable.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.name}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* xlChart
|
||||||
|
* xlDialogSheet
|
||||||
|
* xlExcel4IntlMacroSheet
|
||||||
|
* xlExcel4MacroSheet
|
||||||
|
* xlWorksheet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_name(VALUE self)
|
||||||
|
{
|
||||||
|
return rb_ivar_get(self, rb_intern("name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_ole_type(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE type;
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
ole_raise(hr, eWIN32OLERuntimeError, "failed to GetVarDesc");
|
||||||
|
type = ole_typedesc2val(pTypeInfo, &(pVarDesc->elemdescVar.tdesc), Qnil);
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#ole_type
|
||||||
|
*
|
||||||
|
* Returns OLE type string.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.ole_type} #{variable.name}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* INT xlChart
|
||||||
|
* INT xlDialogSheet
|
||||||
|
* INT xlExcel4IntlMacroSheet
|
||||||
|
* INT xlExcel4MacroSheet
|
||||||
|
* INT xlWorksheet
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_ole_type(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_ole_type(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_ole_type_detail(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE type = rb_ary_new();
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
ole_raise(hr, eWIN32OLERuntimeError, "failed to GetVarDesc");
|
||||||
|
ole_typedesc2val(pTypeInfo, &(pVarDesc->elemdescVar.tdesc), type);
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#ole_type_detail
|
||||||
|
*
|
||||||
|
* Returns detail information of type. The information is array of type.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('DirectX 7 for Visual Basic Type Library', 'D3DCLIPSTATUS')
|
||||||
|
* variable = tobj.variables.find {|variable| variable.name == 'lFlags'}
|
||||||
|
* tdetail = variable.ole_type_detail
|
||||||
|
* p tdetail # => ["USERDEFINED", "CONST_D3DCLIPSTATUSFLAGS"]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_ole_type_detail(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_ole_type_detail(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_value(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE val = Qnil;
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return Qnil;
|
||||||
|
if(pVarDesc->varkind == VAR_CONST)
|
||||||
|
val = ole_variant2val(V_UNION1(pVarDesc, lpvarValue));
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#value
|
||||||
|
*
|
||||||
|
* Returns value if value is exists. If the value does not exist,
|
||||||
|
* this method returns nil.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.name} #{variable.value}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* xlChart = -4109
|
||||||
|
* xlDialogSheet = -4116
|
||||||
|
* xlExcel4IntlMacroSheet = 4
|
||||||
|
* xlExcel4MacroSheet = 3
|
||||||
|
* xlWorksheet = -4167
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_value(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_value(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_visible(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE visible = Qfalse;
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return visible;
|
||||||
|
if (!(pVarDesc->wVarFlags & (VARFLAG_FHIDDEN |
|
||||||
|
VARFLAG_FRESTRICTED |
|
||||||
|
VARFLAG_FNONBROWSABLE))) {
|
||||||
|
visible = Qtrue;
|
||||||
|
}
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#visible?
|
||||||
|
*
|
||||||
|
* Returns true if the variable is public.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.name} #{variable.visible?}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* xlChart true
|
||||||
|
* xlDialogSheet true
|
||||||
|
* xlExcel4IntlMacroSheet true
|
||||||
|
* xlExcel4MacroSheet true
|
||||||
|
* xlWorksheet true
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_visible(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_visible(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_kind(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE kind = rb_str_new2("UNKNOWN");
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return kind;
|
||||||
|
switch(pVarDesc->varkind) {
|
||||||
|
case VAR_PERINSTANCE:
|
||||||
|
kind = rb_str_new2("PERINSTANCE");
|
||||||
|
break;
|
||||||
|
case VAR_STATIC:
|
||||||
|
kind = rb_str_new2("STATIC");
|
||||||
|
break;
|
||||||
|
case VAR_CONST:
|
||||||
|
kind = rb_str_new2("CONSTANT");
|
||||||
|
break;
|
||||||
|
case VAR_DISPATCH:
|
||||||
|
kind = rb_str_new2("DISPATCH");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
return kind;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#variable_kind
|
||||||
|
*
|
||||||
|
* Returns variable kind string.
|
||||||
|
*
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.name} #{variable.variable_kind}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* xlChart CONSTANT
|
||||||
|
* xlDialogSheet CONSTANT
|
||||||
|
* xlExcel4IntlMacroSheet CONSTANT
|
||||||
|
* xlExcel4MacroSheet CONSTANT
|
||||||
|
* xlWorksheet CONSTANT
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_variable_kind(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_kind(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
ole_variable_varkind(ITypeInfo *pTypeInfo, UINT var_index)
|
||||||
|
{
|
||||||
|
VARDESC *pVarDesc;
|
||||||
|
HRESULT hr;
|
||||||
|
VALUE kind = Qnil;
|
||||||
|
hr = pTypeInfo->lpVtbl->GetVarDesc(pTypeInfo, var_index, &pVarDesc);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return kind;
|
||||||
|
pTypeInfo->lpVtbl->ReleaseVarDesc(pTypeInfo, pVarDesc);
|
||||||
|
kind = INT2FIX(pVarDesc->varkind);
|
||||||
|
return kind;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#varkind
|
||||||
|
*
|
||||||
|
* Returns the number which represents variable kind.
|
||||||
|
* tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')
|
||||||
|
* variables = tobj.variables
|
||||||
|
* variables.each do |variable|
|
||||||
|
* puts "#{variable.name} #{variable.varkind}"
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* The result of above script is following:
|
||||||
|
* xlChart 2
|
||||||
|
* xlDialogSheet 2
|
||||||
|
* xlExcel4IntlMacroSheet 2
|
||||||
|
* xlExcel4MacroSheet 2
|
||||||
|
* xlWorksheet 2
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_varkind(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariabledata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariabledata, pvar);
|
||||||
|
return ole_variable_varkind(pvar->pTypeInfo, pvar->index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIABLE#inspect -> String
|
||||||
|
*
|
||||||
|
* Returns the OLE variable name and the value with class name.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariable_inspect(VALUE self)
|
||||||
|
{
|
||||||
|
VALUE detail = rb_funcall(self, rb_intern("to_s"), 0);
|
||||||
|
rb_str_cat2(detail, "=");
|
||||||
|
rb_str_concat(detail, rb_funcall(rb_funcall(self, rb_intern("value"), 0), rb_intern("inspect"), 0));
|
||||||
|
return make_inspect("WIN32OLE_VARIABLE", detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init_win32ole_variable()
|
||||||
|
{
|
||||||
|
cWIN32OLE_VARIABLE = rb_define_class("WIN32OLE_VARIABLE", rb_cObject);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "name", folevariable_name, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "ole_type", folevariable_ole_type, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "ole_type_detail", folevariable_ole_type_detail, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "value", folevariable_value, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "visible?", folevariable_visible, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "variable_kind", folevariable_variable_kind, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "varkind", folevariable_varkind, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIABLE, "inspect", folevariable_inspect, 0);
|
||||||
|
rb_define_alias(cWIN32OLE_VARIABLE, "to_s", "name");
|
||||||
|
}
|
8
ext/win32ole/win32ole_variable.h
Normal file
8
ext/win32ole/win32ole_variable.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef WIN32OLE_VARIABLE_H
|
||||||
|
#define WIN32OLE_VARIABLE_H 1
|
||||||
|
|
||||||
|
VALUE cWIN32OLE_VARIABLE;
|
||||||
|
VALUE create_win32ole_variable(ITypeInfo *pTypeInfo, UINT index, VALUE name);
|
||||||
|
void Init_win32ole_variable();
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user