1
0
Fork 0
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:
suke 2010-01-23 11:02:17 +00:00
parent 0f29696f9d
commit 4b18062808
3 changed files with 74 additions and 1 deletions

View file

@ -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> Sat Jan 23 00:25:19 2010 Yusuke Endoh <mame@tsg.ne.jp>
* sample/coverage.rb: preserve exit status. * sample/coverage.rb: preserve exit status.

View 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

View file

@ -130,7 +130,7 @@ const IID IID_IMultiLanguage2 = {0xDCCFC164, 0x2B38, 0x11d2, {0xB7, 0xEC, 0x00,
#define WC2VSTR(x) ole_wc2vstr((x), TRUE) #define WC2VSTR(x) ole_wc2vstr((x), TRUE)
#define WIN32OLE_VERSION "1.4.6" #define WIN32OLE_VERSION "1.4.7"
typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); (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 BOOL lcid_installed(LCID lcid);
static VALUE fole_s_set_locale(VALUE self, VALUE vlcid); static VALUE fole_s_set_locale(VALUE self, VALUE vlcid);
static VALUE fole_s_create_guid(VALUE self); 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 fole_initialize(int argc, VALUE *argv, VALUE self);
static VALUE hash2named_arg(VALUE pair, struct oleparam* pOp); static VALUE hash2named_arg(VALUE pair, struct oleparam* pOp);
static VALUE set_argv(VARIANTARG* realargs, unsigned int beg, unsigned int end); 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); 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 * 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_get_locale, 0);
rb_define_singleton_method(cWIN32OLE, "locale=", fole_s_set_locale, 1); 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, "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, "invoke", fole_invoke, -1);
rb_define_method(cWIN32OLE, "[]", fole_getproperty_with_bracket, -1); rb_define_method(cWIN32OLE, "[]", fole_getproperty_with_bracket, -1);