Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

94 lines
3.6 KiB

/*++
Copyright (c) 2001, Microsoft Corporation
Module Name:
delay.cpp
Abstract:
This file implements the delay load.
Author:
Revision History:
Notes:
--*/
#include "private.h"
#include "delay.h"
FARPROC GetFn(HINSTANCE *phInst, WCHAR *pchLib, char *pchFunc, BOOL fLoad)
{
if (*phInst == NULL)
{
if (fLoad)
*phInst = LoadSystemLibraryW(pchLib);
if (*phInst == NULL)
{
#ifdef DEBUG
if (fLoad)
{
Assert(0);
}
#endif
return NULL;
}
}
return GetProcAddress(*phInst, pchFunc);
}
#define DELAYLOAD(_hInst, _DllName, _CallConv, _FuncName, _Args1, _Args2, _RetType, _ErrVal, _fLoad) \
_RetType _CallConv _FuncName _Args1 \
{ \
static FARPROC pfn = NULL; \
\
if (pfn == NULL || _hInst == NULL) \
{ \
pfn = GetFn(&_hInst, L#_DllName, #_FuncName, _fLoad); \
\
if (pfn == NULL) \
{ \
if (_fLoad) \
{ \
Assert(0); \
} \
return (_RetType) _ErrVal; \
} \
} \
\
return ((_RetType (_CallConv *)_Args1) (pfn)) _Args2; \
}
HINSTANCE g_hOle32 = NULL;
HRESULT Internal_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv)
{
static FARPROC pfn = NULL;
if (pfn == NULL || g_hOle32 == NULL) {
pfn = GetFn(&g_hOle32, L"ole32.dll", "CoCreateInstance", TRUE);
if (pfn == NULL) {
Assert(0);
return E_FAIL;
}
}
return ((HRESULT (WINAPI *)(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv))(pfn))(rclsid, pUnkOuter, dwClsContext, riid, ppv);
}
HINSTANCE g_hMsimtf = NULL;
DELAYLOAD(g_hMsimtf, Msimtf.dll, WINAPI, MsimtfIsWindowFiltered, (HWND hwnd), (hwnd), BOOL, FALSE, TRUE)
DELAYLOAD(g_hMsimtf, Msimtf.dll, WINAPI, MsimtfIsGuidMapEnable, (HIMC himc,BOOL *pbGuidMap), (himc, pbGuidMap), BOOL, FALSE, TRUE)
HINSTANCE g_hMsctf = NULL;
DELAYLOAD(g_hMsctf, Msctf.dll, WINAPI, TF_CreateThreadMgr, (ITfThreadMgr **pptim), (pptim), HRESULT, E_FAIL, TRUE)
DELAYLOAD(g_hMsctf, Msctf.dll, WINAPI, TF_GetThreadMgr, (ITfThreadMgr **pptim), (pptim), HRESULT, E_FAIL, TRUE)
DELAYLOAD(g_hMsctf, Msctf.dll, WINAPI, TF_CreateInputProcessorProfiles, (ITfInputProcessorProfiles **ppipp), (ppipp), HRESULT, E_FAIL, TRUE)
DELAYLOAD(g_hMsctf, Msctf.dll, WINAPI, TF_DllDetachInOther, (void), (), BOOL, FALSE, FALSE)