/* ** m i m e d e m . h ** ** Purpose: implement the loader functions for defer/demand -loaded libraries ** ** Creators: yst ** Created: 2/10/99 ** ** Copyright (C) Microsoft Corp. 1999 */ // // IF YOU #INCLUDE A FILE HERE YOU PROBABLY ARE CONFUSED. // THIS FILE IS INCLUDED BY LOTS OF PEOPLE. THINK THRICE // BEFORE #INCLUDING *ANYTHING* HERE. MAKE GOOD USE // OF FORWARD REFS INSTEAD. // #define USE_CRITSEC #ifdef IMPLEMENT_LOADER_FUNCTIONS #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \ typedef ret (WINAPI * TYP_##name) args1; \ extern TYP_##name VAR_##name; \ ret WINAPI LOADER_##name args1 \ { \ DemandLoad##dll(); \ if (VAR_##name == LOADER_##name) return err; \ return VAR_##name args2; \ } \ TYP_##name VAR_##name = LOADER_##name; #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \ typedef ret (WINAPI * TYP_##name) args1; \ extern TYP_##name VAR_##name; \ ret WINAPI LOADER_##name args1 \ { \ DemandLoad##dll(); \ if (VAR_##name == LOADER_##name) return; \ VAR_##name args2; \ return; \ } \ TYP_##name VAR_##name = LOADER_##name; #else // !IMPLEMENT_LOADER_FUNCTIONS #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \ typedef ret (WINAPI * TYP_##name) args1; \ extern TYP_##name VAR_##name; #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \ typedef ret (WINAPI * TYP_##name) args1; \ extern TYP_##name VAR_##name; #endif // IMPLEMENT_LOADER_FUNCTIONS void InitDemandMimeole(void); void FreeDemandMimeOle(void); ///////////////////////////////////// // INETCOMM.DLL #include "mimeole.h" #define _INETCOMM_ BOOL DemandLoadMimeOle(void); LOADER_FUNCTION( HRESULT, MimeOleSMimeCapsToDlg, (LPBYTE pbSMimeCaps, DWORD cbSMimeCaps, DWORD cCerts, PCX509CERT * rgCerts, HWND hwndDlg, DWORD idEncAlgs, DWORD idSignAlgs, DWORD idBlob), (pbSMimeCaps, cbSMimeCaps, cCerts, rgCerts, hwndDlg, idEncAlgs, idSignAlgs,idBlob), E_FAIL, MimeOle) #define MimeOleSMimeCapsToDlg VAR_MimeOleSMimeCapsToDlg LOADER_FUNCTION( HRESULT, MimeOleSMimeCapsFromDlg, (HWND hwnd, DWORD idEncAlgs, DWORD idSignAlgs, DWORD idBlob, LPBYTE pbSMimeCaps, DWORD * pcbSmimeCaps), (hwnd, idEncAlgs, idSignAlgs, idBlob, pbSMimeCaps, pcbSmimeCaps), E_FAIL, MimeOle) #define MimeOleSMimeCapsFromDlg VAR_MimeOleSMimeCapsFromDlg LOADER_FUNCTION( HRESULT, MimeOleSMimeCapsFull, (LPVOID pv, BOOL fFullEncryption, BOOL fFullSigning, LPBYTE pbSymCaps, DWORD * pcbSymCaps), (pv, fFullEncryption, fFullSigning, pbSymCaps, pcbSymCaps), E_FAIL, MimeOle) #define MimeOleSMimeCapsFull VAR_MimeOleSMimeCapsFull LOADER_FUNCTION( HRESULT, MimeOleSMimeCapInit, (LPBYTE pbSMimeCap, DWORD cbSMimeCap, LPVOID * ppv), (pbSMimeCap, cbSMimeCap, ppv), E_FAIL, MimeOle) #define MimeOleSMimeCapInit VAR_MimeOleSMimeCapInit