diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c index 960c03da1c..47dc558671 100644 --- a/ext/win32ole/win32ole.c +++ b/ext/win32ole/win32ole.c @@ -3397,7 +3397,7 @@ typeinfo_from_ole(struct oledata *pole, ITypeInfo **ppti) HRESULT hr = pole->pDispatch->lpVtbl->GetTypeInfo(pole->pDispatch, 0, lcid, &pTypeInfo); if(FAILED(hr)) { - ole_raise(hr, rb_eRuntimeError, "failed to GetTypeInfo"); + ole_raise(hr, eWIN32OLEQueryInterfaceError, "failed to GetTypeInfo"); } hr = pTypeInfo->lpVtbl->GetDocumentation(pTypeInfo, -1, @@ -3407,7 +3407,7 @@ typeinfo_from_ole(struct oledata *pole, ITypeInfo **ppti) hr = pTypeInfo->lpVtbl->GetContainingTypeLib(pTypeInfo, &pTypeLib, &i); OLE_RELEASE(pTypeInfo); if (FAILED(hr)) { - ole_raise(hr, rb_eRuntimeError, "failed to GetContainingTypeLib"); + ole_raise(hr, eWIN32OLEQueryInterfaceError, "failed to GetContainingTypeLib"); } count = pTypeLib->lpVtbl->GetTypeInfoCount(pTypeLib); for (i = 0; i < count; i++) { diff --git a/ext/win32ole/win32ole_error.c b/ext/win32ole/win32ole_error.c index 62e69b186c..022527617e 100644 --- a/ext/win32ole/win32ole_error.c +++ b/ext/win32ole/win32ole_error.c @@ -80,4 +80,5 @@ Init_win32ole_error(void) * */ eWIN32OLERuntimeError = rb_define_class("WIN32OLERuntimeError", rb_eRuntimeError); + eWIN32OLEQueryInterfaceError = rb_define_class("WIN32OLEQueryInterfaceError", eWIN32OLERuntimeError); } diff --git a/ext/win32ole/win32ole_error.h b/ext/win32ole/win32ole_error.h index e0eee0ecf9..296eb101ad 100644 --- a/ext/win32ole/win32ole_error.h +++ b/ext/win32ole/win32ole_error.h @@ -2,6 +2,7 @@ #define WIN32OLE_ERROR_H 1 VALUE eWIN32OLERuntimeError; +VALUE eWIN32OLEQueryInterfaceError; NORETURN(PRINTF_ARGS(void ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...), 3, 4)); void Init_win32ole_error(void); diff --git a/ext/win32ole/win32ole_method.c b/ext/win32ole/win32ole_method.c index 381c1cbbd3..f2578072d2 100644 --- a/ext/win32ole/win32ole_method.c +++ b/ext/win32ole/win32ole_method.c @@ -119,7 +119,7 @@ ole_methods_from_typeinfo(ITypeInfo *pTypeInfo, int mask) VALUE methods = rb_ary_new(); hr = OLE_GET_TYPEATTR(pTypeInfo, &pTypeAttr); if (FAILED(hr)) { - ole_raise(hr, eWIN32OLERuntimeError, "failed to GetTypeAttr"); + ole_raise(hr, eWIN32OLEQueryInterfaceError, "failed to GetTypeAttr"); } ole_methods_sub(0, pTypeInfo, methods, mask); @@ -179,7 +179,7 @@ ole_methods_sub(ITypeInfo *pOwnerTypeInfo, ITypeInfo *pTypeInfo, VALUE methods, WORD i; hr = OLE_GET_TYPEATTR(pTypeInfo, &pTypeAttr); if (FAILED(hr)) { - ole_raise(hr, eWIN32OLERuntimeError, "failed to GetTypeAttr"); + ole_raise(hr, eWIN32OLEQueryInterfaceError, "failed to GetTypeAttr"); } for(i = 0; i < pTypeAttr->cFuncs; i++) { hr = pTypeInfo->lpVtbl->GetFuncDesc(pTypeInfo, i, &pFuncDesc);