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>
|
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.
|
||||||
|
|
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 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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue