From: Harald Radi Date: Fri, 1 Jun 2001 23:39:44 +0000 (+0000) Subject: removed hardcoded typelib version. X-Git-Tag: PRE_GRANULAR_GARBAGE_FIX~150 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94769b8f72ba4008bb9691bab8bdd4996c6e741b;p=php removed hardcoded typelib version. forgot to call release on typinfo and dispatch when obtaining typelib from classname. --- diff --git a/ext/com/COM.c b/ext/com/COM.c index de98c35aba..373ad06c04 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -1093,33 +1093,42 @@ static int php_COM_load_typelib(char *typelib_name, int mode) if(!FAILED(CLSIDFromString(p, &clsid))) { HRESULT hr; + WORD major_i = 1; + WORD minor_i = 0; if(major && minor) { - hr = LoadRegTypeLib((REFGUID) &clsid, 1, 0, LANG_NEUTRAL, &TypeLib); + major_i = (WORD) atoi(major); + minor_i = (WORD) atoi(minor); } - if(!major || !minor || FAILED(hr)) + hr = LoadRegTypeLib((REFGUID) &clsid, major_i, minor_i, LANG_NEUTRAL, &TypeLib); + + if(FAILED(hr) && (!major || !minor)) { - IDispatch *i_dispatch; + IDispatch *Dispatch; ITypeInfo *TypeInfo; int idx; - if(FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &i_dispatch))) + if(FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &Dispatch))) { efree(p); return FAILURE; } - if(FAILED(i_dispatch->lpVtbl->GetTypeInfo(i_dispatch, 0, LANG_NEUTRAL, &TypeInfo))) + if(FAILED(Dispatch->lpVtbl->GetTypeInfo(Dispatch, 0, LANG_NEUTRAL, &TypeInfo))) { + Dispatch->lpVtbl->Release(Dispatch); efree(p); return FAILURE; } + Dispatch->lpVtbl->Release(Dispatch); if(FAILED(TypeInfo->lpVtbl->GetContainingTypeLib(TypeInfo, &TypeLib, &idx))) { + TypeInfo->lpVtbl->Release(TypeInfo); efree(p); return FAILURE; } + TypeInfo->lpVtbl->Release(TypeInfo); } } else diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index de98c35aba..373ad06c04 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -1093,33 +1093,42 @@ static int php_COM_load_typelib(char *typelib_name, int mode) if(!FAILED(CLSIDFromString(p, &clsid))) { HRESULT hr; + WORD major_i = 1; + WORD minor_i = 0; if(major && minor) { - hr = LoadRegTypeLib((REFGUID) &clsid, 1, 0, LANG_NEUTRAL, &TypeLib); + major_i = (WORD) atoi(major); + minor_i = (WORD) atoi(minor); } - if(!major || !minor || FAILED(hr)) + hr = LoadRegTypeLib((REFGUID) &clsid, major_i, minor_i, LANG_NEUTRAL, &TypeLib); + + if(FAILED(hr) && (!major || !minor)) { - IDispatch *i_dispatch; + IDispatch *Dispatch; ITypeInfo *TypeInfo; int idx; - if(FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &i_dispatch))) + if(FAILED(CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID *) &Dispatch))) { efree(p); return FAILURE; } - if(FAILED(i_dispatch->lpVtbl->GetTypeInfo(i_dispatch, 0, LANG_NEUTRAL, &TypeInfo))) + if(FAILED(Dispatch->lpVtbl->GetTypeInfo(Dispatch, 0, LANG_NEUTRAL, &TypeInfo))) { + Dispatch->lpVtbl->Release(Dispatch); efree(p); return FAILURE; } + Dispatch->lpVtbl->Release(Dispatch); if(FAILED(TypeInfo->lpVtbl->GetContainingTypeLib(TypeInfo, &TypeLib, &idx))) { + TypeInfo->lpVtbl->Release(TypeInfo); efree(p); return FAILURE; } + TypeInfo->lpVtbl->Release(TypeInfo); } } else