"jack" jack@itma.pwr.wroc.pl wrote:
@@ -3265,6 +3266,7 @@ return NULL; } *ppTypeInfoImpl = (ITypeInfoImpl*)ITypeInfo_Constructor();
pTypeLibImpl->ref++;
Are you sure you need this piece of the patch? It causes the following test program to fail:
#define COBJMACROS
#include <stdarg.h> #include <stdio.h> #include <assert.h>
#include "windef.h" #include "winbase.h" #include "oleauto.h"
static void load_type_lib(LPCWSTR type_lib) { ITypeLib *iface; TLIBATTR *pTLibAttr; HRESULT hResult; ULONG ref_count; // DWORD dwWritten;
printf("Loading: "%ws"\n", type_lib);
hResult = LoadTypeLib(type_lib, &iface); printf("LoadTypeLib() = %08lx\n", hResult); assert(hResult == S_OK);
hResult = ITypeLib2_GetLibAttr(iface, &pTLibAttr); printf("GetLibAttr() = %08lx\n", hResult); assert(hResult == S_OK);
// fflush(stdout); // WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), pTLibAttr, sizeof(*pTLibAttr), &dwWritten, NULL); // printf("\n\n");
ITypeLib2_ReleaseTLibAttr(iface, pTLibAttr);
ref_count = ITypeLib2_Release(iface); printf("ITypeLib2_Release() = %lu\n", ref_count); assert(ref_count == 0); }
int main(void) { // load_type_lib(L"olepro32.dll"); // load_type_lib(L"msvbvm60.dll"); load_type_lib(L"stdole32.tlb"); return 0; }