[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]