Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

95 lines
4.5 KiB

/*-----------------------------------------------------------------------------+
| DYNALINK.H |
| |
| (C) Copyright Microsoft Corporation 1994. All rights reserved. |
| |
| This file contains definitions and macros which allow the transparent |
| loading and calling of APIs which are dynamically rather than statically |
| linked. |
| |
| |
| Revision History |
| July 1994 Andrew Bell created |
| |
+-----------------------------------------------------------------------------*/
typedef struct _PROC_INFO
{
LPCSTR Name;
FARPROC Address;
}
PROC_INFO, *PPROC_INFO;
BOOL LoadLibraryAndProcs(LPTSTR pLibrary, PPROC_INFO pProcInfo, HMODULE *phLibrary);
#define PROCS_LOADED( pProcInfo ) ( (pProcInfo)[0].Address != NULL )
#define LOAD_IF_NEEDED( Library, ProcInfo, phLibrary ) ( PROCS_LOADED( ProcInfo ) || \
LoadLibraryAndProcs( Library, ProcInfo, phLibrary ) )
extern TCHAR szComDlg32[];
extern TCHAR szMPR[];
extern TCHAR szOLE32[];
extern HMODULE hComDlg32;
extern HMODULE hMPR;
extern HMODULE hOLE32;
extern PROC_INFO ComDlg32Procs[];
extern PROC_INFO MPRProcs[];
extern PROC_INFO OLE32Procs[];
#ifdef UNICODE
#define GetOpenFileNameW (LOAD_IF_NEEDED(szComDlg32, ComDlg32Procs, &hComDlg32),\
(*ComDlg32Procs[0].Address))
#else
#define GetOpenFileNameA (LOAD_IF_NEEDED(szComDlg32, ComDlg32Procs, &hComDlg32),\
(*ComDlg32Procs[0].Address))
#endif
#ifdef UNICODE
/* This assumes that WNetGetUniversalName will always be the first to be called.
*/
#define WNetGetUniversalNameW (LOAD_IF_NEEDED(szMPR, MPRProcs, &hMPR), \
(*MPRProcs[0].Address))
#define WNetGetConnectionW (*MPRProcs[1].Address)
#define WNetGetLastErrorW (*MPRProcs[2].Address)
#else
#define WNetGetUniversalNameA (LOAD_IF_NEEDED(szMPR, MPRProcs, &hMPR), \
(*MPRProcs[0].Address))
#define WNetGetConnectionA (*MPRProcs[1].Address)
#define WNetGetLastErrorA (*MPRProcs[2].Address)
#endif
/* OleInitialize must always be called before before any of the
* other APIs.
*/
#define CLSIDFromProgID (*OLE32Procs[0].Address)
#define CoCreateInstance (*OLE32Procs[1].Address)
#define CoDisconnectObject (*OLE32Procs[2].Address)
#define CoGetMalloc (*OLE32Procs[3].Address)
#define CoRegisterClassObject (*OLE32Procs[4].Address)
#define CoRevokeClassObject (*OLE32Procs[5].Address)
#define CreateDataAdviseHolder (*OLE32Procs[6].Address)
#define CreateFileMoniker (*OLE32Procs[7].Address)
#define CreateOleAdviseHolder (*OLE32Procs[8].Address)
#define DoDragDrop (*OLE32Procs[9].Address)
#define IsAccelerator (*OLE32Procs[10].Address)
#define OleCreateMenuDescriptor (HOLEMENU)(*OLE32Procs[11].Address)
#define OleDestroyMenuDescriptor (*OLE32Procs[12].Address)
#define OleDuplicateData (HANDLE)(*OLE32Procs[13].Address)
#define OleFlushClipboard (*OLE32Procs[14].Address)
#define OleGetClipboard (*OLE32Procs[15].Address)
#define OleInitialize (LOAD_IF_NEEDED(szOLE32, OLE32Procs, &hOLE32), \
(*OLE32Procs[16].Address))
#define OleIsCurrentClipboard (*OLE32Procs[17].Address)
#define OleSetClipboard (*OLE32Procs[18].Address)
#define OleTranslateAccelerator (*OLE32Procs[19].Address)
#define OleUninitialize (*OLE32Procs[20].Address)
#define StgCreateDocfile (*OLE32Procs[21].Address)
#define WriteClassStg (*OLE32Procs[22].Address)
#define WriteFmtUserTypeStg (*OLE32Procs[23].Address)
#ifndef IsEqualGUID
#define IsEqualGUID (*OLE32Procs[24].Address)
#endif