diff options
| author | Harald Radi <phanto@php.net> | 2001-06-01 23:39:44 +0000 |
|---|---|---|
| committer | Harald Radi <phanto@php.net> | 2001-06-01 23:39:44 +0000 |
| commit | 94769b8f72ba4008bb9691bab8bdd4996c6e741b (patch) | |
| tree | eef33e5d9b58708e132ce308f280b701cdf43d26 /ext/com/COM.c | |
| parent | 354c57a93116f13aa0d258b07ab7b7859f95a9a4 (diff) | |
| download | php-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.c | 19 |
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 |
