mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* ext/win32ole/win32ole.c: add WIN32OLE.ole_initialize,
WIN32OLE.ole_uninitialize to use in win32ole.rb. You must not use thease methods. * ext/win32ole/lib/win32ole.rb: add win32ole.rb re-define Thread#initialize (fix ruby-core:27634) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									0f29696f9d
								
							
						
					
					
						commit
						4b18062808
					
				
					 3 changed files with 74 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,12 @@
 | 
			
		|||
Sat Jan 23 19:54:48 2010  Masaki Suketa <masaki.suketa@nifty.ne.jp>
 | 
			
		||||
 | 
			
		||||
	* ext/win32ole/win32ole.c: add WIN32OLE.ole_initialize,
 | 
			
		||||
	  WIN32OLE.ole_uninitialize to use in win32ole.rb.
 | 
			
		||||
	  You must not use thease methods.
 | 
			
		||||
 | 
			
		||||
	* ext/win32ole/lib/win32ole.rb: add win32ole.rb 
 | 
			
		||||
	  re-define Thread#initialize (fix ruby-core:27634)
 | 
			
		||||
 | 
			
		||||
Sat Jan 23 00:25:19 2010  Yusuke Endoh  <mame@tsg.ne.jp>
 | 
			
		||||
 | 
			
		||||
	* sample/coverage.rb: preserve exit status.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								ext/win32ole/lib/win32ole.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								ext/win32ole/lib/win32ole.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
require 'win32ole.so'
 | 
			
		||||
 | 
			
		||||
# re-define Thread#initialize
 | 
			
		||||
# bug #2618(ruby-core:27634)
 | 
			
		||||
 | 
			
		||||
class Thread
 | 
			
		||||
  alias :org_initialize :initialize
 | 
			
		||||
  def initialize(*arg, &block)
 | 
			
		||||
    if block
 | 
			
		||||
      org_initialize(*arg) {
 | 
			
		||||
        WIN32OLE.ole_initialize
 | 
			
		||||
        begin
 | 
			
		||||
          block.call(*arg)
 | 
			
		||||
        ensure
 | 
			
		||||
          WIN32OLE.ole_uninitialize
 | 
			
		||||
        end
 | 
			
		||||
      }
 | 
			
		||||
    else
 | 
			
		||||
      org_initialize(*arg)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ const IID IID_IMultiLanguage2 = {0xDCCFC164, 0x2B38, 0x11d2, {0xB7, 0xEC, 0x00,
 | 
			
		|||
 | 
			
		||||
#define WC2VSTR(x) ole_wc2vstr((x), TRUE)
 | 
			
		||||
 | 
			
		||||
#define WIN32OLE_VERSION "1.4.6"
 | 
			
		||||
#define WIN32OLE_VERSION "1.4.7"
 | 
			
		||||
 | 
			
		||||
typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
 | 
			
		||||
    (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
 | 
			
		||||
| 
						 | 
				
			
			@ -357,6 +357,10 @@ static BOOL CALLBACK installed_lcid_proc(LPTSTR str);
 | 
			
		|||
static BOOL lcid_installed(LCID lcid);
 | 
			
		||||
static VALUE fole_s_set_locale(VALUE self, VALUE vlcid);
 | 
			
		||||
static VALUE fole_s_create_guid(VALUE self);
 | 
			
		||||
static void  ole_pure_initialize();
 | 
			
		||||
static VALUE fole_s_ole_initialize(VALUE self);
 | 
			
		||||
static void  ole_pure_uninitialize();
 | 
			
		||||
static VALUE fole_s_ole_uninitialize(VALUE self);
 | 
			
		||||
static VALUE fole_initialize(int argc, VALUE *argv, VALUE self);
 | 
			
		||||
static VALUE hash2named_arg(VALUE pair, struct oleparam* pOp);
 | 
			
		||||
static VALUE set_argv(VARIANTARG* realargs, unsigned int beg, unsigned int end);
 | 
			
		||||
| 
						 | 
				
			
			@ -3091,6 +3095,42 @@ fole_s_create_guid(VALUE self)
 | 
			
		|||
    return ole_wc2vstr(bstr, FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * WIN32OLE.ole_initialize and WIN32OLE.ole_uninitialize
 | 
			
		||||
 * are used in win32ole.rb to fix the issue bug #2618 (ruby-core:27634).
 | 
			
		||||
 * You must not use thease method.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static void  ole_pure_initialize()
 | 
			
		||||
{
 | 
			
		||||
    HRESULT hr;
 | 
			
		||||
    hr = OleInitialize(NULL);
 | 
			
		||||
    if(FAILED(hr)) {
 | 
			
		||||
        ole_raise(hr, rb_eRuntimeError, "fail: OLE initialize");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void  ole_pure_uninitialize()
 | 
			
		||||
{
 | 
			
		||||
    OleUninitialize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* :nodoc */
 | 
			
		||||
static VALUE 
 | 
			
		||||
fole_s_ole_initialize(VALUE self)
 | 
			
		||||
{
 | 
			
		||||
    ole_pure_initialize();
 | 
			
		||||
    return Qnil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* :nodoc */
 | 
			
		||||
static VALUE 
 | 
			
		||||
fole_s_ole_uninitialize(VALUE self)
 | 
			
		||||
{
 | 
			
		||||
    ole_pure_uninitialize();
 | 
			
		||||
    return Qnil;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Document-class: WIN32OLE
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -9043,6 +9083,8 @@ Init_win32ole()
 | 
			
		|||
    rb_define_singleton_method(cWIN32OLE, "locale", fole_s_get_locale, 0);
 | 
			
		||||
    rb_define_singleton_method(cWIN32OLE, "locale=", fole_s_set_locale, 1);
 | 
			
		||||
    rb_define_singleton_method(cWIN32OLE, "create_guid", fole_s_create_guid, 0);
 | 
			
		||||
    rb_define_singleton_method(cWIN32OLE, "ole_initialize", fole_s_ole_initialize, 0);
 | 
			
		||||
    rb_define_singleton_method(cWIN32OLE, "ole_uninitialize", fole_s_ole_uninitialize, 0);
 | 
			
		||||
 | 
			
		||||
    rb_define_method(cWIN32OLE, "invoke", fole_invoke, -1);
 | 
			
		||||
    rb_define_method(cWIN32OLE, "[]", fole_getproperty_with_bracket, -1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue