50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
|
// File: pfnwininet.cpp
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#include "pfnwininet.h"
|
||
|
|
||
|
PFN_IOPEN WININET::InternetOpen = NULL;
|
||
|
PFN_ISETCALLBACK WININET::InternetSetStatusCallback = NULL;
|
||
|
PFN_IOPENURL WININET::InternetOpenUrl = NULL;
|
||
|
PFN_IREADFILE WININET::InternetReadFile = NULL;
|
||
|
PFN_IQUERYDATA WININET::InternetQueryDataAvailable = NULL;
|
||
|
PFN_ICLOSEHAN WININET::InternetCloseHandle = NULL;
|
||
|
//PFN_IREADFILEEX WININET::InternetReadFileEx = NULL;
|
||
|
|
||
|
HINSTANCE WININET::m_hInstance = NULL;
|
||
|
|
||
|
|
||
|
#define WININET_APIFCN_ENTRYA(pfn) {(PVOID *) &WININET::##pfn, #pfn ## "A"}
|
||
|
#define WININET_APIFCN_ENTRYW(pfn) {(PVOID *) &WININET::##pfn, #pfn ## "A"}
|
||
|
#define WININET_APIFCN_ENTRYNONE(pfn) {(PVOID *) &WININET::##pfn, #pfn }
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
#define WININET_APIFCN_ENTRY WININET_APIFCN_ENTRYW
|
||
|
#else
|
||
|
#define WININET_APIFCN_ENTRY WININET_APIFCN_ENTRYA
|
||
|
#endif
|
||
|
|
||
|
APIFCN s_apiFcnWinInet[] = {
|
||
|
WININET_APIFCN_ENTRYA(InternetOpen),
|
||
|
WININET_APIFCN_ENTRYNONE(InternetSetStatusCallback),
|
||
|
WININET_APIFCN_ENTRY(InternetOpenUrl),
|
||
|
WININET_APIFCN_ENTRYNONE(InternetReadFile),
|
||
|
WININET_APIFCN_ENTRYNONE(InternetQueryDataAvailable),
|
||
|
WININET_APIFCN_ENTRYNONE(InternetCloseHandle)
|
||
|
};
|
||
|
|
||
|
HRESULT WININET::Init(void)
|
||
|
{
|
||
|
if (NULL != WININET::m_hInstance)
|
||
|
return S_OK;
|
||
|
|
||
|
return HrInitLpfn(s_apiFcnWinInet, ARRAY_ELEMENTS(s_apiFcnWinInet), &WININET::m_hInstance, TEXT("WININET.DLL"));
|
||
|
}
|
||
|
|
||
|
void WININET::DeInit(void)
|
||
|
{
|
||
|
// TODO - why does the main thread die when I unload this?
|
||
|
if( NULL != WININET::m_hInstance )
|
||
|
FreeLibrary( WININET::m_hInstance );
|
||
|
}
|