3 static void olemethod_free(
void *
ptr);
4 static size_t olemethod_size(
const void *
ptr);
5 static VALUE ole_method_sub(
VALUE self, ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo,
VALUE name);
7 static VALUE ole_methods_sub(ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo,
VALUE methods,
int mask);
8 static VALUE olemethod_set_member(
VALUE self, ITypeInfo *pTypeInfo, ITypeInfo *pOwnerTypeInfo,
int index,
VALUE name);
11 static VALUE ole_method_return_type(ITypeInfo *pTypeInfo, UINT method_index);
12 static VALUE folemethod_return_type(
VALUE self);
13 static VALUE ole_method_return_vtype(ITypeInfo *pTypeInfo, UINT method_index);
14 static VALUE folemethod_return_vtype(
VALUE self);
15 static VALUE ole_method_return_type_detail(ITypeInfo *pTypeInfo, UINT method_index);
16 static VALUE folemethod_return_type_detail(
VALUE self);
17 static VALUE ole_method_invkind(ITypeInfo *pTypeInfo, UINT method_index);
18 static VALUE ole_method_invoke_kind(ITypeInfo *pTypeInfo, UINT method_index);
20 static VALUE folemethod_invoke_kind(
VALUE self);
21 static VALUE ole_method_visible(ITypeInfo *pTypeInfo, UINT method_index);
23 static VALUE ole_method_event(ITypeInfo *pTypeInfo, UINT method_index,
VALUE method_name);
25 static VALUE folemethod_event_interface(
VALUE self);
26 static HRESULT ole_method_docinfo_from_type(ITypeInfo *pTypeInfo, UINT method_index, BSTR *
name, BSTR *helpstr,
DWORD *helpcontext, BSTR *helpfile);
27 static VALUE ole_method_helpstring(ITypeInfo *pTypeInfo, UINT method_index);
28 static VALUE folemethod_helpstring(
VALUE self);
29 static VALUE ole_method_helpfile(ITypeInfo *pTypeInfo, UINT method_index);
31 static VALUE ole_method_helpcontext(ITypeInfo *pTypeInfo, UINT method_index);
32 static VALUE folemethod_helpcontext(
VALUE self);
33 static VALUE ole_method_dispid(ITypeInfo *pTypeInfo, UINT method_index);
35 static VALUE ole_method_offset_vtbl(ITypeInfo *pTypeInfo, UINT method_index);
36 static VALUE folemethod_offset_vtbl(
VALUE self);
37 static VALUE ole_method_size_params(ITypeInfo *pTypeInfo, UINT method_index);
38 static VALUE folemethod_size_params(
VALUE self);
39 static VALUE ole_method_size_opt_params(ITypeInfo *pTypeInfo, UINT method_index);
40 static VALUE folemethod_size_opt_params(
VALUE self);
41 static VALUE ole_method_params(ITypeInfo *pTypeInfo, UINT method_index);
47 {
NULL, olemethod_free, olemethod_size,},
52 olemethod_free(
void *
ptr)
61 olemethod_size(
const void *
ptr)
88 for(
i = 0;
i < pTypeAttr->cFuncs && method ==
Qnil;
i++) {
118 ITypeInfo *pRefTypeInfo;
126 for(
i=0;
i < pTypeAttr->cImplTypes;
i++){
147 ITypeInfo *pRefTypeInfo;
154 if (method !=
Qnil) {
157 for(
i=0;
i < pTypeAttr->cImplTypes && method ==
Qnil;
i++){
164 method = ole_method_sub(
self,
pTypeInfo, pRefTypeInfo,
name);
184 for(
i = 0;
i < pTypeAttr->cFuncs;
i++) {
195 if(pFuncDesc->invkind &
mask) {
245 &olemethod_datatype, pmethod);
297 folemethod_name(
VALUE self)
303 ole_method_return_type(ITypeInfo *
pTypeInfo, UINT method_index)
329 folemethod_return_type(
VALUE self)
333 return ole_method_return_type(pmethod->
pTypeInfo, pmethod->
index);
337 ole_method_return_vtype(ITypeInfo *
pTypeInfo, UINT method_index)
347 vvt =
RB_INT2FIX(pFuncDesc->elemdescFunc.tdesc.vt);
363 folemethod_return_vtype(
VALUE self)
367 return ole_method_return_vtype(pmethod->
pTypeInfo, pmethod->
index);
371 ole_method_return_type_detail(ITypeInfo *
pTypeInfo, UINT method_index)
397 folemethod_return_type_detail(
VALUE self)
401 return ole_method_return_type_detail(pmethod->
pTypeInfo, pmethod->
index);
405 ole_method_invkind(ITypeInfo *
pTypeInfo, UINT method_index)
419 ole_method_invoke_kind(ITypeInfo *
pTypeInfo, UINT method_index)
423 if((
RB_FIX2INT(invkind) & INVOKE_PROPERTYGET) &&
424 (
RB_FIX2INT(invkind) & INVOKE_PROPERTYPUT) ) {
426 }
else if(
RB_FIX2INT(invkind) & INVOKE_PROPERTYGET) {
428 }
else if(
RB_FIX2INT(invkind) & INVOKE_PROPERTYPUT) {
430 }
else if(
RB_FIX2INT(invkind) & INVOKE_PROPERTYPUTREF) {
432 }
else if(
RB_FIX2INT(invkind) & INVOKE_FUNC) {
449 folemethod_invkind(
VALUE self)
468 folemethod_invoke_kind(
VALUE self)
472 return ole_method_invoke_kind(pmethod->
pTypeInfo, pmethod->
index);
476 ole_method_visible(ITypeInfo *
pTypeInfo, UINT method_index)
484 if (pFuncDesc->wFuncFlags & (FUNCFLAG_FRESTRICTED |
486 FUNCFLAG_FNONBROWSABLE)) {
505 folemethod_visible(
VALUE self)
513 ole_method_event(ITypeInfo *
pTypeInfo, UINT method_index,
VALUE method_name)
520 ITypeInfo *pRefTypeInfo;
529 if(pTypeAttr->typekind != TKIND_COCLASS) {
533 for (
i = 0;
i < pTypeAttr->cImplTypes;
i++) {
538 if (flags & IMPLTYPEFLAG_FSOURCE) {
544 href, &pRefTypeInfo);
547 hr = pRefTypeInfo->lpVtbl->GetFuncDesc(pRefTypeInfo, method_index,
554 hr = pRefTypeInfo->lpVtbl->GetDocumentation(pRefTypeInfo,
558 pRefTypeInfo->lpVtbl->ReleaseFuncDesc(pRefTypeInfo, pFuncDesc);
564 pRefTypeInfo->lpVtbl->ReleaseFuncDesc(pRefTypeInfo, pFuncDesc);
587 folemethod_event(
VALUE self)
608 folemethod_event_interface(
VALUE self)
614 if(folemethod_event(
self) ==
Qtrue) {
623 ole_method_docinfo_from_type(
639 helpcontext, helpfile);
645 ole_method_helpstring(ITypeInfo *
pTypeInfo, UINT method_index)
649 hr = ole_method_docinfo_from_type(
pTypeInfo, method_index,
NULL, &bhelpstring,
668 folemethod_helpstring(
VALUE self)
676 ole_method_helpfile(ITypeInfo *
pTypeInfo, UINT method_index)
698 folemethod_helpfile(
VALUE self)
707 ole_method_helpcontext(ITypeInfo *
pTypeInfo, UINT method_index)
710 DWORD helpcontext = 0;
728 folemethod_helpcontext(
VALUE self)
732 return ole_method_helpcontext(pmethod->
pTypeInfo, pmethod->
index);
736 ole_method_dispid(ITypeInfo *
pTypeInfo, UINT method_index)
759 folemethod_dispid(
VALUE self)
767 ole_method_offset_vtbl(ITypeInfo *
pTypeInfo, UINT method_index)
790 folemethod_offset_vtbl(
VALUE self)
794 return ole_method_offset_vtbl(pmethod->
pTypeInfo, pmethod->
index);
798 ole_method_size_params(ITypeInfo *
pTypeInfo, UINT method_index)
822 folemethod_size_params(
VALUE self)
826 return ole_method_size_params(pmethod->
pTypeInfo, pmethod->
index);
830 ole_method_size_opt_params(ITypeInfo *
pTypeInfo, UINT method_index)
837 return size_opt_params;
838 size_opt_params =
RB_INT2FIX(pFuncDesc->cParamsOpt);
840 return size_opt_params;
853 folemethod_size_opt_params(
VALUE self)
857 return ole_method_size_opt_params(pmethod->
pTypeInfo, pmethod->
index);
861 ole_method_params(ITypeInfo *
pTypeInfo, UINT method_index)
874 bstrs =
ALLOCA_N(BSTR, pFuncDesc->cParams + 1);
876 bstrs, pFuncDesc->cParams + 1,
882 SysFreeString(bstrs[0]);
883 if (pFuncDesc->cParams > 0) {
884 for(
i = 1;
i <
len;
i++) {
906 folemethod_params(
VALUE self)
921 folemethod_inspect(
VALUE self)