diff options
author | suke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-20 07:05:20 +0000 |
---|---|---|
committer | suke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-20 07:05:20 +0000 |
commit | 2ec4f0e6428f116cae81fb6476141eb10ff56ed9 (patch) | |
tree | 3d1f626d0ddbe531e2e0ead2caa5f9446304ce3f /ext/win32ole | |
parent | 011fb97d630f217da66ad35717533ba75cf4ef8c (diff) | |
download | ruby-2ec4f0e6428f116cae81fb6476141eb10ff56ed9.tar.gz ruby-2ec4f0e6428f116cae81fb6476141eb10ff56ed9.tar.xz ruby-2ec4f0e6428f116cae81fb6476141eb10ff56ed9.zip |
* ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
instead of rb_rescue2. [ruby-dev:35595]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/win32ole')
-rw-r--r-- | ext/win32ole/win32ole.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c index cf64666c2..5e8fd30ee 100644 --- a/ext/win32ole/win32ole.c +++ b/ext/win32ole/win32ole.c @@ -118,7 +118,7 @@ #define WC2VSTR(x) ole_wc2vstr((x), TRUE) -#define WIN32OLE_VERSION "1.2.6" +#define WIN32OLE_VERSION "1.2.7" typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); @@ -7522,6 +7522,7 @@ STDMETHODIMP EVENTSINK_Invoke( VALUE arg[2]; VALUE is_outarg; BOOL is_default_handler = FALSE; + int state; PIEVENTSINKOBJ pEV = (PIEVENTSINKOBJ)pEventSink; pTypeInfo = pEV->pTypeInfo; @@ -7571,13 +7572,14 @@ STDMETHODIMP EVENTSINK_Invoke( */ arg[0] = handler; arg[1] = args; - result = rb_rescue2(exec_callback, (VALUE)arg, - rescue_callback, Qnil, - rb_eException, (VALUE)0); + result = rb_protect(exec_callback, (VALUE)arg, &state); + if (state != 0) { + rescue_callback(Qnil); + } if(TYPE(result) == T_HASH) { hash2ptr_dispparams(result, pTypeInfo, dispid, pdispparams); result = hash2result(result); - }else if (is_outarg == Qtrue && outargv != Qnil) { + }else if (is_outarg == Qtrue && TYPE(outargv) == T_ARRAY) { ary2ptr_dispparams(outargv, pdispparams); } |