79 &oleparam_datatype, pparam);
94 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
99 bstrs =
ALLOCA_N(BSTR, pFuncDesc->cParams + 1);
100 hr = pTypeInfo->lpVtbl->GetNames(pTypeInfo, pFuncDesc->memid,
101 bstrs, pFuncDesc->cParams + 1,
104 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
107 SysFreeString(bstrs[0]);
108 if (param_index < 1 || len <= (UINT)param_index)
110 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
118 pparam->
index = param_index - 1;
121 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
178 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
182 &(pFuncDesc->lprgelemdescParam[index].tdesc),
Qnil);
183 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
212 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
216 &(pFuncDesc->lprgelemdescParam[index].tdesc), typedetail);
217 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
246 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
249 if (
V_UNION1((&(pFuncDesc->lprgelemdescParam[index])), paramdesc).wParamFlags &mask)
251 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
271 pparam->
index, PARAMFLAG_FIN);
299 pparam->
index, PARAMFLAG_FOUT);
318 pparam->
index, PARAMFLAG_FOPT);
338 pparam->
index, PARAMFLAG_FRETVAL);
346 PARAMDESCEX * pParamDescEx;
349 USHORT mask = PARAMFLAG_FOPT|PARAMFLAG_FHASDEFAULT;
351 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
354 pElemDesc = &pFuncDesc->lprgelemdescParam[
index];
355 wParamFlags =
V_UNION1(pElemDesc, paramdesc).wParamFlags;
356 if ((wParamFlags & mask) == mask) {
357 pParamDescEx =
V_UNION1(pElemDesc, paramdesc).pparamdescex;
360 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
415 if (defval !=
Qnil) {
void Init_win32ole_param(void)
#define RUBY_TYPED_FREE_IMMEDIATELY
static VALUE ole_param_ole_type_detail(ITypeInfo *pTypeInfo, UINT method_index, UINT index)
static VALUE ole_param_flag_mask(ITypeInfo *pTypeInfo, UINT method_index, UINT index, USHORT mask)
#define TypedData_Get_Struct(obj, type, data_type, sval)
static size_t oleparam_size(const void *ptr)
static VALUE foleparam_ole_type_detail(VALUE self)
VALUE rb_str_concat(VALUE, VALUE)
static VALUE oleparam_ole_param(VALUE self, VALUE olemethod, int n)
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_ivar_get(VALUE, ID)
static VALUE foleparam_retval(VALUE self)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE rb_obj_is_kind_of(VALUE, VALUE)
static VALUE foleparam_output(VALUE self)
static VALUE ole_param_default(ITypeInfo *pTypeInfo, UINT method_index, UINT index)
static VALUE foleparam_default(VALUE self)
static VALUE foleparam_optional(VALUE self)
static const rb_data_type_t oleparam_datatype
VALUE make_inspect(const char *class_name, VALUE detail)
void ole_raise(HRESULT hr, VALUE ecs, const char *fmt,...)
RUBY_EXTERN VALUE rb_cObject
VALUE rb_str_cat2(VALUE, const char *)
static VALUE foleparam_ole_type(VALUE self)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
#define ALLOCA_N(type, n)
VALUE ole_variant2val(VARIANT *pvar)
static VALUE foleparam_initialize(VALUE self, VALUE olemethod, VALUE n)
static VALUE foleparam_s_allocate(VALUE klass)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
VALUE rb_ivar_set(VALUE, ID, VALUE)
static VALUE foleparam_name(VALUE self)
struct olemethoddata * olemethod_data_get_struct(VALUE obj)
static VALUE foleparam_input(VALUE self)
register unsigned int len
VALUE ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails)
VALUE create_win32ole_param(ITypeInfo *pTypeInfo, UINT method_index, UINT index, VALUE name)
typedef HRESULT(STDAPICALLTYPE FNCOCREATEINSTANCEEX)(REFCLSID
static VALUE ole_param_ole_type(ITypeInfo *pTypeInfo, UINT method_index, UINT index)
#define TypedData_Make_Struct(klass, type, data_type, sval)
static void oleparam_free(void *ptr)
static VALUE foleparam_inspect(VALUE self)
static VALUE oleparam_ole_param_from_index(VALUE self, ITypeInfo *pTypeInfo, UINT method_index, int param_index)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)