3static void olemethod_free(
void *
ptr);
4static size_t olemethod_size(
const void *
ptr);
5static VALUE ole_method_sub(
VALUE self, ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo,
VALUE name);
7static VALUE ole_methods_sub(ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo,
VALUE methods,
int mask);
11static VALUE ole_method_return_type(ITypeInfo *pTypeInfo, UINT method_index);
12static VALUE folemethod_return_type(
VALUE self);
13static VALUE ole_method_return_vtype(ITypeInfo *pTypeInfo, UINT method_index);
14static VALUE folemethod_return_vtype(
VALUE self);
15static VALUE ole_method_return_type_detail(ITypeInfo *pTypeInfo, UINT method_index);
16static VALUE folemethod_return_type_detail(
VALUE self);
17static VALUE ole_method_invkind(ITypeInfo *pTypeInfo, UINT method_index);
18static VALUE ole_method_invoke_kind(ITypeInfo *pTypeInfo, UINT method_index);
20static VALUE folemethod_invoke_kind(
VALUE self);
21static VALUE ole_method_visible(ITypeInfo *pTypeInfo, UINT method_index);
23static VALUE ole_method_event(ITypeInfo *pTypeInfo, UINT method_index,
VALUE method_name);
25static VALUE folemethod_event_interface(
VALUE self);
26static HRESULT ole_method_docinfo_from_type(ITypeInfo *pTypeInfo, UINT method_index, BSTR *
name, BSTR *helpstr,
DWORD *helpcontext, BSTR *helpfile);
27static VALUE ole_method_helpstring(ITypeInfo *pTypeInfo, UINT method_index);
29static VALUE ole_method_helpfile(ITypeInfo *pTypeInfo, UINT method_index);
31static VALUE ole_method_helpcontext(ITypeInfo *pTypeInfo, UINT method_index);
32static VALUE folemethod_helpcontext(
VALUE self);
33static VALUE ole_method_dispid(ITypeInfo *pTypeInfo, UINT method_index);
35static VALUE ole_method_offset_vtbl(ITypeInfo *pTypeInfo, UINT method_index);
36static VALUE folemethod_offset_vtbl(
VALUE self);
37static VALUE ole_method_size_params(ITypeInfo *pTypeInfo, UINT method_index);
38static VALUE folemethod_size_params(
VALUE self);
39static VALUE ole_method_size_opt_params(ITypeInfo *pTypeInfo, UINT method_index);
40static VALUE folemethod_size_opt_params(
VALUE self);
41static VALUE ole_method_params(ITypeInfo *pTypeInfo, UINT method_index);
47 {
NULL, olemethod_free, olemethod_size,},
52olemethod_free(
void *
ptr)
61olemethod_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);
297folemethod_name(
VALUE self)
303ole_method_return_type(ITypeInfo *
pTypeInfo, UINT method_index)
329folemethod_return_type(
VALUE self)
333 return ole_method_return_type(pmethod->
pTypeInfo, pmethod->
index);
337ole_method_return_vtype(ITypeInfo *
pTypeInfo, UINT method_index)
347 vvt =
RB_INT2FIX(pFuncDesc->elemdescFunc.tdesc.vt);
363folemethod_return_vtype(
VALUE self)
367 return ole_method_return_vtype(pmethod->
pTypeInfo, pmethod->
index);
371ole_method_return_type_detail(ITypeInfo *
pTypeInfo, UINT method_index)
397folemethod_return_type_detail(
VALUE self)
401 return ole_method_return_type_detail(pmethod->
pTypeInfo, pmethod->
index);
405ole_method_invkind(ITypeInfo *
pTypeInfo, UINT method_index)
419ole_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) {
449folemethod_invkind(
VALUE self)
468folemethod_invoke_kind(
VALUE self)
472 return ole_method_invoke_kind(pmethod->
pTypeInfo, pmethod->
index);
476ole_method_visible(ITypeInfo *
pTypeInfo, UINT method_index)
484 if (pFuncDesc->wFuncFlags & (FUNCFLAG_FRESTRICTED |
486 FUNCFLAG_FNONBROWSABLE)) {
505folemethod_visible(
VALUE self)
513ole_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);
587folemethod_event(
VALUE self)
608folemethod_event_interface(
VALUE self)
614 if(folemethod_event(
self) ==
Qtrue) {
623ole_method_docinfo_from_type(
639 helpcontext, helpfile);
645ole_method_helpstring(ITypeInfo *
pTypeInfo, UINT method_index)
649 hr = ole_method_docinfo_from_type(
pTypeInfo, method_index,
NULL, &bhelpstring,
668folemethod_helpstring(
VALUE self)
676ole_method_helpfile(ITypeInfo *
pTypeInfo, UINT method_index)
698folemethod_helpfile(
VALUE self)
707ole_method_helpcontext(ITypeInfo *
pTypeInfo, UINT method_index)
710 DWORD helpcontext = 0;
728folemethod_helpcontext(
VALUE self)
732 return ole_method_helpcontext(pmethod->
pTypeInfo, pmethod->
index);
736ole_method_dispid(ITypeInfo *
pTypeInfo, UINT method_index)
759folemethod_dispid(
VALUE self)
767ole_method_offset_vtbl(ITypeInfo *
pTypeInfo, UINT method_index)
790folemethod_offset_vtbl(
VALUE self)
794 return ole_method_offset_vtbl(pmethod->
pTypeInfo, pmethod->
index);
798ole_method_size_params(ITypeInfo *
pTypeInfo, UINT method_index)
822folemethod_size_params(
VALUE self)
826 return ole_method_size_params(pmethod->
pTypeInfo, pmethod->
index);
830ole_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;
853folemethod_size_opt_params(
VALUE self)
857 return ole_method_size_opt_params(pmethod->
pTypeInfo, pmethod->
index);
861ole_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++) {
906folemethod_params(
VALUE self)
921folemethod_inspect(
VALUE self)
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
void rb_define_alias(VALUE, const char *, const char *)
Defines an alias of a method.
VALUE rb_cObject
Object class.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_obj_is_kind_of(VALUE, VALUE)
Determines if obj is a kind of c.
VALUE type(ANYARGS)
ANYARGS-ed function type.
ITypeInfo * pOwnerTypeInfo
HRESULT ole_docinfo_from_type(ITypeInfo *pTypeInfo, BSTR *name, BSTR *helpstr, DWORD *helpcontext, BSTR *helpfile)
VALUE ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails)
typedef HRESULT(STDAPICALLTYPE FNCOCREATEINSTANCEEX)(REFCLSID
VALUE default_inspect(VALUE self, const char *class_name)
#define OLE_RELEASE_TYPEATTR(X, Y)
#define OLE_GET_TYPEATTR(X, Y)
VALUE eWIN32OLERuntimeError
VALUE eWIN32OLEQueryInterfaceError
void ole_raise(HRESULT hr, VALUE ecs, const char *fmt,...)
VALUE folemethod_s_allocate(VALUE klass)
VALUE ole_methods_from_typeinfo(ITypeInfo *pTypeInfo, int mask)
struct olemethoddata * olemethod_data_get_struct(VALUE obj)
VALUE create_win32ole_method(ITypeInfo *pTypeInfo, VALUE name)
void Init_win32ole_method(void)
VALUE create_win32ole_param(ITypeInfo *pTypeInfo, UINT method_index, UINT index, VALUE name)
ITypeInfo * itypeinfo(VALUE self)