|
|
/*--------------------------------------------------------------------------*
* * Microsoft Windows * Copyright (C) Microsoft Corporation, 1992 - 000 * * File: msaastub.h * * Contents: Provides stub implementations of OLEACC functions that * aren't available on backlevel OS's (Win95, NT4 SP3). * These implementations were copied from msaa.h, which * is no longer supported. * * History: 20-Jun-2000 jeffro Created * *--------------------------------------------------------------------------*/
#pragma once
#ifdef __cplusplus
extern "C" { // Assume C declarations for C++
#endif // __cplusplus
// UnDefine these names so we can re-define them below.
#undef AccessibleObjectFromWindow
#undef LresultFromObject
//
// Define COMPILE_MSAA_STUBS to compile the stubs;
// otherwise, you get the declarations.
//
// Exactly one source must include this with COMPILE_MSAA_STUBS defined.
//
#ifdef COMPILE_MSAA_STUBS
//-----------------------------------------------------------------------------
//
// Implement the API stubs.
//
//-----------------------------------------------------------------------------
#ifndef MSAA_FNS_DEFINED
// OLEACC
HRESULT (WINAPI* g_pfnAccessibleObjectFromWindow)(HWND,DWORD,REFIID,void **) = NULL; LRESULT (WINAPI* g_pfnLresultFromObject)(REFIID,WPARAM,LPUNKNOWN) = NULL; // STATUS
BOOL g_fMSAAInitDone = FALSE;
#endif
//-----------------------------------------------------------------------------
// This is the function that checks that all the required API's exist, and
// then allows apps that include this file to call the real functions if they
// exist, or the 'stubs' if they do not. This function is only called by the
// stub functions - client code never needs to call this.
//-----------------------------------------------------------------------------
BOOL InitMSAAStubs(void) { HMODULE hOleacc;
if (g_fMSAAInitDone) { return g_pfnLresultFromObject != NULL; }
hOleacc = GetModuleHandle(TEXT("OLEACC.DLL")); if (!hOleacc) hOleacc = LoadLibrary(TEXT("OLEACC.DLL"));
if ((hOleacc) && (*(FARPROC*)&g_pfnAccessibleObjectFromWindow = GetProcAddress(hOleacc,"AccessibleObjectFromWindow")) && (*(FARPROC*)&g_pfnLresultFromObject = GetProcAddress(hOleacc,"LresultFromObject"))) { g_fMSAAInitDone = TRUE; return TRUE; } else { g_pfnAccessibleObjectFromWindow = NULL; g_pfnLresultFromObject = NULL;
g_fMSAAInitDone = TRUE; return FALSE; } }
//-----------------------------------------------------------------------------
//
// Fake implementations of MSAA APIs that return error codes.
// No special parameter validation is made since these run in client code
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Fake implementation of AccessibleObjectFromWindow. Returns E_NOTIMPL if the
// real API is not present.
//-----------------------------------------------------------------------------
HRESULT WINAPI xAccessibleObjectFromWindow (HWND hWnd,DWORD dwID,REFIID riidInterface, void ** ppvObject) { if (InitMSAAStubs()) return g_pfnAccessibleObjectFromWindow (hWnd,dwID,riidInterface,ppvObject);
return (E_NOTIMPL); }
//-----------------------------------------------------------------------------
// Fake implementation of LresultFromObject. Returns E_NOTIMPL if the real API
// is not present.
//-----------------------------------------------------------------------------
LRESULT WINAPI xLresultFromObject (REFIID riidInterface,WPARAM wParam,LPUNKNOWN pUnk) { if (InitMSAAStubs()) return g_pfnLresultFromObject (riidInterface,wParam,pUnk);
return (E_NOTIMPL); }
#undef COMPILE_MSAA_STUBS
#else // COMPILE_MSAA_STUBS
extern HRESULT WINAPI xAccessibleObjectFromWindow (HWND hWnd, DWORD dwID, REFIID riidInterface, void ** ppvObject); extern LRESULT WINAPI xLresultFromObject (REFIID riidInterface, WPARAM wParam, LPUNKNOWN pUnk);
#endif // COMPILE_MSAA_STUBS
//
// build defines that replace the regular APIs with our versions
//
#define AccessibleObjectFromWindow xAccessibleObjectFromWindow
#define LresultFromObject xLresultFromObject
#ifdef __cplusplus
} #endif // __cplusplus
|