|
|
/*==========================================================================
* * Copyright (C) 1999-2002 Microsoft Corporation. All Rights Reserved. * * File: DllMain.cpp * Content: Defines the entry point for the DLL application. *@@BEGIN_MSINTERNAL * History: * Date By Reason * ==== == ====== * 07/21/99 mjn Created * 07/13/2000 rmt Added critical sections to protect FPMs * 07/21/2000 RichGr IA64: Use %p format specifier for 32/64-bit pointers. * 01/04/2001 rodtoll WinBug #94200 - Remove stray comments *@@END_MSINTERNAL * ***************************************************************************/
#include "dnaddri.h"
// Globals
#ifndef DPNBUILD_LIBINTERFACE
extern LONG g_lAddrObjectCount; extern IClassFactoryVtbl DP8ACF_Vtbl; #endif // ! DPNBUILD_LIBINTERFACE
DEBUG_ONLY(BOOL g_fAddrObjectInited = FALSE);
#ifndef DPNBUILD_ONLYONESP
#define WSA_INITED 0x00000001
#endif // ! DPNBUILD_ONLYONESP
#define ADDROBJ_INITED 0x00000002
#define ADDRELEM_INITED 0x00000004
#define STRCACHE_INITED 0x00000008
DWORD g_dwAddrInitFlags = 0;
void DNAddressDeInit();
#undef DPF_MODNAME
#define DPF_MODNAME "DNAddressInit"
BOOL DNAddressInit(HANDLE hModule) { #ifndef DPNBUILD_ONLYONESP
WSADATA wsaData; #endif // ! DPNBUILD_ONLYONESP
#ifdef DPNBUILD_PREALLOCATEDMEMORYMODEL
XDP8STARTUP_PARAMS * pStartupParams;
//
// The instance handle is actually a pointer to the initialization parameters.
//
pStartupParams = (XDP8STARTUP_PARAMS*) hModule; #endif // DPNBUILD_PREALLOCATEDMEMORYMODEL
#ifdef DBG
DNASSERT(!g_fAddrObjectInited); #endif // DBG
#ifndef DPNBUILD_ONLYONESP
if( WSAStartup( MAKEWORD(1,1), &wsaData ) ) { DPFX(DPFPREP, 0, "Unable to load winsock. Error" ); goto Failure; } g_dwAddrInitFlags |= WSA_INITED; #endif // ! DPNBUILD_ONLYONESP
if (!fpmAddressObjects.Initialize( sizeof( DP8ADDRESSOBJECT ), DP8ADDRESSOBJECT::FPM_BlockCreate, DP8ADDRESSOBJECT::FPM_BlockInit, DP8ADDRESSOBJECT::FPM_BlockRelease, DP8ADDRESSOBJECT::FPM_BlockDestroy )) { DPFX(DPFPREP, 0,"Failed to initialize address object pool"); goto Failure; } g_dwAddrInitFlags |= ADDROBJ_INITED;
if (!fpmAddressElements.Initialize( sizeof( DP8ADDRESSELEMENT ), NULL, DP8ADDRESSOBJECT::FPM_Element_BlockInit, DP8ADDRESSOBJECT::FPM_Element_BlockRelease, NULL )) { DPFX(DPFPREP, 0,"Failed to allocate address element pool"); goto Failure; } g_dwAddrInitFlags |= ADDRELEM_INITED;
if (FAILED(DP8A_STRCACHE_Init())) { DPFX(DPFPREP, 0,"Failed to initialize string cache"); goto Failure; } g_dwAddrInitFlags |= STRCACHE_INITED;
#ifdef DPNBUILD_PREALLOCATEDMEMORYMODEL
if (DNAddress_PreallocateInterfaces(pStartupParams->dwNumAddressInterfaces) != DPN_OK) { DPFX(DPFPREP, 0, "Couldn't pre-allocate %u address objects!", pStartupParams->dwNumAddressInterfaces); goto Failure; } #endif // DPNBUILD_PREALLOCATEDMEMORYMODEL
DEBUG_ONLY(g_fAddrObjectInited = TRUE);
return TRUE;
Failure: DNAddressDeInit();
return FALSE; }
#undef DPF_MODNAME
#define DPF_MODNAME "DNAddressDeInit"
void DNAddressDeInit() { #ifdef DBG
DNASSERT(g_fAddrObjectInited); #endif // DBG
DPFX(DPFPREP, 5, "Deinitializing Addressing");
if (g_dwAddrInitFlags & STRCACHE_INITED) { DP8A_STRCACHE_Free(); } if (g_dwAddrInitFlags & ADDRELEM_INITED) { fpmAddressElements.DeInitialize(); } if (g_dwAddrInitFlags & ADDROBJ_INITED) { fpmAddressObjects.DeInitialize(); } #ifndef DPNBUILD_ONLYONESP
if (g_dwAddrInitFlags & WSA_INITED) { WSACleanup(); } #endif // ! DPNBUILD_ONLYONESP
g_dwAddrInitFlags = 0;
DEBUG_ONLY(g_fAddrObjectInited = FALSE); }
#ifndef DPNBUILD_NOCOMREGISTER
#undef DPF_MODNAME
#define DPF_MODNAME "DNAddressRegister"
BOOL DNAddressRegister(LPCWSTR wszDLLName) { if( !CRegistry::Register( L"DirectPlay8Address.Address.1", L"DirectPlay8Address Object", wszDLLName, &CLSID_DirectPlay8Address, L"DirectPlay8Address.Address") ) { DPFERR( "Could not register address object" ); return FALSE; }
else { return TRUE; } }
#undef DPF_MODNAME
#define DPF_MODNAME "DNAddressUnRegister"
BOOL DNAddressUnRegister() { if( !CRegistry::UnRegister(&CLSID_DirectPlay8Address) ) { DPFX(DPFPREP, 0, "Failed to unregister server object" ); return FALSE; } else { return TRUE; }
}
#endif // !DPNBUILD_NOCOMREGISTER
#ifndef DPNBUILD_LIBINTERFACE
#undef DPF_MODNAME
#define DPF_MODNAME "DNAddressGetRemainingObjectCount"
DWORD DNAddressGetRemainingObjectCount() { return g_lAddrObjectCount; }
#endif // ! DPNBUILD_LIBINTERFACE
|