summaryrefslogtreecommitdiff
path: root/ext/com/COM.c
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2001-06-01 23:39:44 +0000
committerHarald Radi <phanto@php.net>2001-06-01 23:39:44 +0000
commit94769b8f72ba4008bb9691bab8bdd4996c6e741b (patch)
treeeef33e5d9b58708e132ce308f280b701cdf43d26 /ext/com/COM.c
parent354c57a93116f13aa0d258b07ab7b7859f95a9a4 (diff)
downloadphp-git-94769b8f72ba4008bb9691bab8bdd4996c6e741b.tar.gz
removed hardcoded typelib version.
forgot to call release on typinfo and dispatch when obtaining typelib from classname.
Diffstat (limited to 'ext/com/COM.c')
-rw-r--r--ext/com/COM.c19
1 files changed, 14 insertions, 5 deletions
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