//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994. // // File: hkOle32x.h // // Contents: OLE 32 Extensions Header File // // Functions: // // History: 29-Nov-94 Garry Lenz Created // //-------------------------------------------------------------------------- #ifndef _HKOLE32X_H_ #define _HKOLE32X_H_ #include #include interface IHookOleObject; STDAPI CoGetCurrentLogicalThreadId(GUID* pguidLogicalThreadId); STDAPI GetHookInterface(IHookOleObject** pIHookOleObject); STDAPI EnableHookObject(BOOL fNewState, BOOL* pfPrevState); #define GUID_STRING_LENGTH 39 #define CLSID_STRING_LENGTH 39 #define IID_STRING_LENGTH 39 #define PROGID_STRING_LENGTH 40 // used by INITHOOKOBJECT inline HRESULT CLSIDFromStringA(LPSTR lpsz, LPCLSID lpclsid) { LPWSTR lpwsz = new WCHAR[(strlen(lpsz)+1)]; MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, lpsz, -1, lpwsz, lstrlenA(lpsz)+1); HRESULT hr = CLSIDFromString(lpwsz, lpclsid); delete lpwsz; return hr; } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// #ifdef OLETOOLS // these are needed only by the tools, not internally by ole32. we ifdef // it here to maintain source compatibility. inline BOOL IsOle32ProcDefined(LPCSTR pszProcName) { BOOL fResult = FALSE; HINSTANCE hInstOle32 = LoadLibrary(__T("OLE32.DLL")); if (hInstOle32) { if (GetProcAddress(hInstOle32, pszProcName) != NULL) fResult = TRUE; FreeLibrary(hInstOle32); } return fResult; } inline HINSTANCE CoLoadLibrary(LPSTR lpszLibName, BOOL bAutoFree) { LPWSTR lpwsz = new WCHAR[(strlen(lpszLibName)+1)]; MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, lpszLibName, -1, lpwsz, lstrlenA(lpszLibName)+1); HINSTANCE hInstance = CoLoadLibrary(lpwsz, bAutoFree); delete lpwsz; return hInstance; } inline HRESULT IIDFromString(LPSTR lpsz, LPIID lpiid) { LPWSTR lpwsz = new WCHAR[(strlen(lpsz)+1)]; MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, lpsz, -1, lpwsz, lstrlenA(lpsz)+1); HRESULT hr = IIDFromString(lpwsz, lpiid); delete lpwsz; return hr; } inline HRESULT StringFromIID(REFIID riid, LPSTR FAR* lplpsz) { HRESULT hr = StringFromIID(riid, (LPWSTR*)lplpsz); if (hr == S_OK) { WCHAR wsz[IID_STRING_LENGTH]; lstrcpyW(wsz, (LPWSTR)*lplpsz); WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsz, -1, *lplpsz, lstrlenW(wsz), NULL, NULL); } return hr; } inline HRESULT StringFromCLSID(REFCLSID rclsid, LPSTR FAR* lplpsz) { HRESULT hr = StringFromCLSID(rclsid, (LPWSTR*)lplpsz); if (hr == S_OK) { WCHAR wsz[CLSID_STRING_LENGTH]; lstrcpyW(wsz, (LPWSTR)*lplpsz); WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsz, -1, *lplpsz, lstrlenW(wsz), NULL, NULL); } return hr; } inline HRESULT ProgIDFromCLSID(REFCLSID rclsid, LPSTR FAR* lplpsz) { HRESULT hr = ProgIDFromCLSID(rclsid, (LPWSTR*)lplpsz); if (hr == S_OK) { WCHAR wsz[PROGID_STRING_LENGTH]; lstrcpyW(wsz, (LPWSTR)*lplpsz); WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsz, -1, *lplpsz, lstrlenW(wsz), NULL, NULL); } return hr; } inline HRESULT CLSIDFromProgID(LPCSTR lpszProgID, LPCLSID lpclsid) { LPWSTR lpwsz = new WCHAR[(strlen(lpszProgID)+1)]; MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, lpszProgID, -1, lpwsz, lstrlenA(lpszProgID)+1); HRESULT hr = CLSIDFromProgID(lpwsz, lpclsid); delete lpwsz; return hr; } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// #endif #endif // _HKOLE32X_H_