#ifndef __OLEBIND_HXX__ #define __OLEBIND_HXX__ #include // safe ptrs so we release interfaces in error paths SAFE_INTERFACE_PTR(XUnknown, IUnknown) SAFE_INTERFACE_PTR(XBindCtx, IBindCtx) SAFE_INTERFACE_PTR(XMoniker, IMoniker) SAFE_INTERFACE_PTR(XStream, IStream) SAFE_INTERFACE_PTR(XMalloc, IMalloc) SAFE_INTERFACE_PTR(XOleObject, IOleObject) SAFE_INTERFACE_PTR(XRunningObjectTable, IRunningObjectTable) SAFE_INTERFACE_PTR(XEnumMoniker, IEnumMoniker) SAFE_INTERFACE_PTR(XOleItemContainer, IOleItemContainer) SAFE_INTERFACE_PTR(XDispatch, IDispatch) // string version of process id extern WCHAR wszPid[10]; #define LAST_RELEASE(x) \ { \ ULONG cnt = x->Release(); \ x.Detach(); \ LPSTR pname = #x; \ if (cnt) \ { \ printf("%s:%d %s still has refs = %ld\n", __FILE__, __LINE__, \ pname, cnt); \ } \ } #define DISPLAY_REFS(x) \ { \ x->AddRef(); \ ULONG cnt = x->Release(); \ LPSTR pname = #x; \ printf("%s refs = %ld\n", pname, cnt); \ } extern const char *szOleBindError; extern char wszErrBuf[]; // Failure return macro to be used when you are not interested in an // HRESULT. #define TEST_FAILED(x, y) \ if (x) \ { \ wsprintfA(&wszErrBuf[0], "%s:%d %s", __FILE__, __LINE__, y); \ MessageBoxA(NULL, &wszErrBuf[0], szOleBindError, MB_OK); \ return TRUE; \ } // Failure return macro to be used when you have an interesting HRESULT // to return. #define TEST_FAILED_HR(x, y) \ if (x) \ { \ wsprintfA(&wszErrBuf[0], "%s:%d %s HRESULT = %lx", __FILE__, __LINE__, y, hr); \ MessageBoxA(NULL, &wszErrBuf[0], szOleBindError, MB_OK); \ return TRUE; \ } // Failure return macro to be used when you have an interesting HRESULT // to return. #define TEST_FAILED_LAST_ERROR(x, y) \ if (x) \ { \ wsprintfA(&wszErrBuf[0], "%s:%d %s Error = %lx",\ __FILE__, __LINE__, y, GetLastError()); \ MessageBoxA(NULL, &wszErrBuf[0], szOleBindError, MB_OK); \ return TRUE; \ } extern WCHAR LongDir[MAX_PATH]; extern WCHAR LongDirShort[MAX_PATH]; extern WCHAR LongDirLong[MAX_PATH]; extern WCHAR LongDirLongSe[MAX_PATH]; // Test standard IMalloc interface BOOL TestStdMalloc(void); #endif // __OLEBIND_HXX__