88 for(i = 0; i < pTypeAttr->cFuncs && method ==
Qnil; i++) {
89 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, i, &pFuncDesc);
93 hr = pTypeInfo->lpVtbl->GetDocumentation(pTypeInfo, pFuncDesc->memid,
96 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
104 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
118 ITypeInfo *pRefTypeInfo;
126 for(i=0; i < pTypeAttr->cImplTypes; i++){
127 hr = pTypeInfo->lpVtbl->GetRefTypeOfImplType(pTypeInfo, i, &href);
130 hr = pTypeInfo->lpVtbl->GetRefTypeInfo(pTypeInfo, href, &pRefTypeInfo);
147 ITypeInfo *pRefTypeInfo;
154 if (method !=
Qnil) {
157 for(i=0; i < pTypeAttr->cImplTypes && method ==
Qnil; i++){
158 hr = pTypeInfo->lpVtbl->GetRefTypeOfImplType(pTypeInfo, i, &href);
161 hr = pTypeInfo->lpVtbl->GetRefTypeInfo(pTypeInfo, href, &pRefTypeInfo);
184 for(i = 0; i < pTypeAttr->cFuncs; i++) {
185 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, i, &pFuncDesc);
189 hr = pTypeInfo->lpVtbl->GetDocumentation(pTypeInfo, pFuncDesc->memid,
192 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
195 if(pFuncDesc->invkind & mask) {
201 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
245 &olemethod_datatype, pmethod);
309 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
314 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
343 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
347 vvt =
RB_INT2FIX(pFuncDesc->elemdescFunc.tdesc.vt);
348 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
377 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
382 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
410 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
414 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
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) {
481 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
484 if (pFuncDesc->wFuncFlags & (FUNCFLAG_FRESTRICTED |
486 FUNCFLAG_FNONBROWSABLE)) {
491 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
520 ITypeInfo *pRefTypeInfo;
529 if(pTypeAttr->typekind != TKIND_COCLASS) {
530 pTypeInfo->lpVtbl->ReleaseTypeAttr(pTypeInfo, pTypeAttr);
533 for (i = 0; i < pTypeAttr->cImplTypes; i++) {
534 hr = pTypeInfo->lpVtbl->GetImplTypeFlags(pTypeInfo, i, &flags);
538 if (flags & IMPLTYPEFLAG_FSOURCE) {
539 hr = pTypeInfo->lpVtbl->GetRefTypeOfImplType(pTypeInfo,
543 hr = pTypeInfo->lpVtbl->GetRefTypeInfo(pTypeInfo,
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);
634 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
637 hr = pTypeInfo->lpVtbl->GetDocumentation(pTypeInfo, pFuncDesc->memid,
639 helpcontext, helpfile);
640 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
710 DWORD helpcontext = 0;
741 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
745 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
772 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
776 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
803 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
807 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
835 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
837 return size_opt_params;
838 size_opt_params =
RB_INT2FIX(pFuncDesc->cParamsOpt);
839 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
840 return size_opt_params;
869 hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, method_index, &pFuncDesc);
874 bstrs =
ALLOCA_N(BSTR, pFuncDesc->cParams + 1);
875 hr = pTypeInfo->lpVtbl->GetNames(pTypeInfo, pFuncDesc->memid,
876 bstrs, pFuncDesc->cParams + 1,
879 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
882 SysFreeString(bstrs[0]);
883 if (pFuncDesc->cParams > 0) {
884 for(i = 1; i <
len; i++) {
889 pTypeInfo->lpVtbl->ReleaseFuncDesc(pTypeInfo, pFuncDesc);
static VALUE method_name(VALUE obj)
static VALUE ole_methods_sub(ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo, VALUE methods, int mask)
VALUE eWIN32OLERuntimeError
#define RUBY_TYPED_FREE_IMMEDIATELY
void Init_win32ole_method(void)
static VALUE folemethod_return_type(VALUE self)
static VALUE ole_method_helpfile(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE olemethod_set_member(VALUE self, ITypeInfo *pTypeInfo, ITypeInfo *pOwnerTypeInfo, int index, VALUE name)
static VALUE folemethod_size_opt_params(VALUE self)
#define TypedData_Get_Struct(obj, type, data_type, sval)
static VALUE folemethod_inspect(VALUE self)
VALUE folemethod_s_allocate(VALUE klass)
static VALUE folemethod_visible(VALUE self)
VALUE rb_ary_push(VALUE ary, VALUE item)
static VALUE folemethod_return_vtype(VALUE self)
void rb_raise(VALUE exc, const char *fmt,...)
#define OLE_GET_TYPEATTR(X, Y)
VALUE rb_ivar_get(VALUE, ID)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE rb_obj_is_kind_of(VALUE, VALUE)
static VALUE folemethod_invkind(VALUE self)
int rb_str_cmp(VALUE, VALUE)
static VALUE folemethod_name(VALUE self)
static VALUE ole_method_sub(VALUE self, ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo, VALUE name)
static VALUE ole_method_visible(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE folemethod_event_interface(VALUE self)
void ole_raise(HRESULT hr, VALUE ecs, const char *fmt,...)
ITypeInfo * pOwnerTypeInfo
VALUE default_inspect(VALUE self, const char *class_name)
RUBY_EXTERN VALUE rb_cObject
static HRESULT ole_method_docinfo_from_type(ITypeInfo *pTypeInfo, UINT method_index, BSTR *name, BSTR *helpstr, DWORD *helpcontext, BSTR *helpfile)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
VALUE ole_methods_from_typeinfo(ITypeInfo *pTypeInfo, int mask)
static VALUE folemethod_params(VALUE self)
#define ALLOCA_N(type, n)
static VALUE ole_method_helpcontext(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE folemethod_return_type_detail(VALUE self)
static VALUE folemethod_invoke_kind(VALUE self)
static VALUE ole_method_params(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE folemethod_helpfile(VALUE self)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
static VALUE folemethod_initialize(VALUE self, VALUE oletype, VALUE method)
static const rb_data_type_t olemethod_datatype
static VALUE folemethod_event(VALUE self)
static VALUE olemethod_from_typeinfo(VALUE self, ITypeInfo *pTypeInfo, VALUE name)
VALUE rb_ivar_set(VALUE, ID, VALUE)
static VALUE folemethod_helpstring(VALUE self)
static VALUE ole_method_dispid(ITypeInfo *pTypeInfo, UINT method_index)
struct olemethoddata * olemethod_data_get_struct(VALUE obj)
static VALUE folemethod_dispid(VALUE self)
static VALUE ole_method_return_vtype(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE ole_method_event(ITypeInfo *pTypeInfo, UINT method_index, VALUE method_name)
register unsigned int len
static VALUE ole_method_invoke_kind(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE ole_method_invkind(ITypeInfo *pTypeInfo, UINT method_index)
VALUE ole_typedesc2val(ITypeInfo *pTypeInfo, TYPEDESC *pTypeDesc, VALUE typedetails)
VALUE create_win32ole_param(ITypeInfo *pTypeInfo, UINT method_index, UINT index, VALUE name)
static VALUE folemethod_size_params(VALUE self)
static VALUE folemethod_helpcontext(VALUE self)
static size_t olemethod_size(const void *ptr)
typedef HRESULT(STDAPICALLTYPE FNCOCREATEINSTANCEEX)(REFCLSID
static VALUE ole_method_helpstring(ITypeInfo *pTypeInfo, UINT method_index)
VALUE create_win32ole_method(ITypeInfo *pTypeInfo, VALUE name)
#define TypedData_Make_Struct(klass, type, data_type, sval)
#define OLE_RELEASE_TYPEATTR(X, Y)
static void olemethod_free(void *ptr)
#define SafeStringValue(v)
#define StringValuePtr(v)
static VALUE ole_method_return_type(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE folemethod_offset_vtbl(VALUE self)
ITypeInfo * itypeinfo(VALUE self)
static VALUE ole_method_return_type_detail(ITypeInfo *pTypeInfo, UINT method_index)
HRESULT ole_docinfo_from_type(ITypeInfo *pTypeInfo, BSTR *name, BSTR *helpstr, DWORD *helpcontext, BSTR *helpfile)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
static VALUE ole_method_size_opt_params(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE ole_method_size_params(ITypeInfo *pTypeInfo, UINT method_index)
static VALUE ole_method_offset_vtbl(ITypeInfo *pTypeInfo, UINT method_index)