ruby-changes:13147
From: suke <ko1@a...>
Date: Sun, 13 Sep 2009 19:42:40 +0900 (JST)
Subject: [ruby-changes:13147] Ruby:r24898 (trunk): ext/win32ole/win32ole.c: some refactoring.
suke 2009-09-13 19:42:24 +0900 (Sun, 13 Sep 2009) New Revision: 24898 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24898 Log: ext/win32ole/win32ole.c: some refactoring. Modified files: trunk/ChangeLog trunk/ext/win32ole/win32ole.c Index: ChangeLog =================================================================== --- ChangeLog (revision 24897) +++ ChangeLog (revision 24898) @@ -1,3 +1,7 @@ +Sun Sep 13 19:39:59 2009 Masaki Suketa <masaki.suketa@n...> + + * ext/win32ole/win32ole.c: some refactoring. + Sun Sep 13 19:38:34 2009 Nobuyoshi Nakada <nobu@r...> * ruby.c (load_file_internal): no need to define DATA when error. Index: ext/win32ole/win32ole.c =================================================================== --- ext/win32ole/win32ole.c (revision 24897) +++ ext/win32ole/win32ole.c (revision 24898) @@ -130,7 +130,7 @@ #define WC2VSTR(x) ole_wc2vstr((x), TRUE) -#define WIN32OLE_VERSION "1.4.3" +#define WIN32OLE_VERSION "1.4.4" typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); @@ -387,8 +387,6 @@ static VALUE fole_func_methods(VALUE self); static VALUE ole_type_from_itypeinfo(ITypeInfo *pTypeInfo); static VALUE fole_type(VALUE self); -static VALUE make_oletypelib_obj(VALUE guid, VALUE major_version, VALUE minor_version); -static VALUE ole_typelib_from_itypelib(ITypeLib *pTypeLib); static VALUE ole_typelib_from_itypeinfo(ITypeInfo *pTypeInfo); static VALUE fole_typelib(VALUE self); static VALUE fole_query_interface(VALUE self, VALUE str_iid); @@ -4330,44 +4328,6 @@ } static VALUE -make_oletypelib_obj(VALUE guid, VALUE major_version, VALUE minor_version) -{ - VALUE args = rb_ary_new(); - rb_ary_push(args, guid); - rb_ary_push(args, major_version); - rb_ary_push(args, minor_version); - return rb_apply(cWIN32OLE_TYPELIB, rb_intern("new"), args); -} - -static VALUE -ole_typelib_from_itypelib(ITypeLib *pTypeLib) -{ - TLIBATTR *pTLibAttr; - OLECHAR bstr[80]; - VALUE guid = Qnil; - VALUE major; - VALUE minor; - int len = 0; - HRESULT hr = S_OK; - hr = pTypeLib->lpVtbl->GetLibAttr(pTypeLib, &pTLibAttr); - if (FAILED(hr)) { - return Qnil; - } - len = StringFromGUID2(&pTLibAttr->guid, bstr, sizeof(bstr)/sizeof(OLECHAR)); - if (len > 3) { - guid = ole_wc2vstr(bstr, FALSE); - } - major = INT2NUM(pTLibAttr->wMajorVerNum); - minor = INT2NUM(pTLibAttr->wMinorVerNum); - pTypeLib->lpVtbl->ReleaseTLibAttr(pTypeLib, pTLibAttr); - if (guid == Qnil) { - return Qnil; - } - return make_oletypelib_obj(guid, major, minor); -} - - -static VALUE ole_typelib_from_itypeinfo(ITypeInfo *pTypeInfo) { HRESULT hr; @@ -4379,8 +4339,8 @@ if(FAILED(hr)) { return Qnil; } - retval = ole_typelib_from_itypelib(pTypeLib); - OLE_RELEASE(pTypeLib); + retval = rb_funcall(cWIN32OLE_TYPELIB, rb_intern("allocate"), 0); + oletypelib_set_member(retval, pTypeLib); return retval; } @@ -5225,12 +5185,11 @@ hr = pTypeLib->lpVtbl->GetDocumentation(pTypeLib, -1, &bstr, &bstr2, NULL, NULL); - if (SUCCEEDED(hr)) { - name = WC2VSTR(bstr2); - return rb_enc_str_new(StringValuePtr(name), strlen(StringValuePtr(name)), cWIN32OLE_enc); - } else { + if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "failed to get name from ITypeLib"); } + name = WC2VSTR(bstr2); + return rb_enc_str_new(StringValuePtr(name), strlen(StringValuePtr(name)), cWIN32OLE_enc); } /* @@ -5384,7 +5343,6 @@ foletypelib_path(VALUE self) { TLIBATTR *pTLibAttr; - int len = 0; HRESULT hr = S_OK; BSTR bstr; LCID lcid = cWIN32OLE_lcid; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/