//#define _WIN32_DCOM #include "stdafx.h" #include #include #include HANDLE g_handleMutex = INVALID_HANDLE_VALUE; WBANetwork::LPFN_ErrorHandler g_lpfnHandler = 0; void WBANetwork_Finalize() { if( g_handleMutex != INVALID_HANDLE_VALUE ) ::CloseHandle( g_handleMutex ); ::WSACleanup(); ::CoUninitialize(); #ifdef _CRT_DEBUG _CrtCheckMemory(); _CrtDumpMemoryLeaks(); #endif } void WBANetwork_DefaultErrorHandler( DWORD /*lastError*/, TCHAR* /*desc*/ ) { // Nothing to do... } bool WBANetwork::Initialize( TCHAR* mutexName, LPFN_ErrorHandler handler ) { CoInitializeEx( 0, COINIT_MULTITHREADED ); // lpfnHandler´Â NullÀÌ µÇ¾î¼­´Â ¾ÈµÈ´Ù. if( handler == 0 ) g_lpfnHandler = WBANetwork_DefaultErrorHandler; else g_lpfnHandler = handler; //CallbackErrorHandler(0,_T("WBANetwork Library Version 1.0.0.1")); if( mutexName != 0 ) { g_handleMutex = ::OpenMutex( MUTEX_ALL_ACCESS, 0, ( LPCTSTR )mutexName ); if( g_handleMutex != 0 ) { CallbackErrorHandler(GetLastError(),_T("Áߺ¹µÈ Mutex ¼¼¼ÇÀÌ Á¸ÀçÇÕ´Ï´Ù.")); return false; } g_handleMutex = ::CreateMutex( 0, 0, ( LPCTSTR )mutexName ); } // Winsock 2.2 ÃʱâÈ­ { WSADATA wsa; if( ::WSAStartup( 0x202, &wsa ) != 0 ) { CallbackErrorHandler(WSAGetLastError(), _T("¼ÒÄÏ ÃʱâÈ­¿¡ ½ÇÆÐ Çß½À´Ï´Ù.")); return false; } } #ifdef _CRT_DEBUG int crtFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); crtFlag |= _CRTDBG_LEAK_CHECK_DF; crtFlag |= _CRTDBG_DELAY_FREE_MEM_DF; crtFlag |= _CRTDBG_CHECK_ALWAYS_DF; _CrtSetDbgFlag( crtFlag ); #endif atexit( WBANetwork_Finalize ); return true; } void WBANetwork::CallbackErrorHandler( DWORD lastError, TCHAR* desc ) { if(NULL != g_lpfnHandler) g_lpfnHandler( lastError, desc ); } DWORD WBANetwork::StringToHash( char* target ) { DWORD ch = 0; DWORD result = 0, xor = 0; DWORD len = ( DWORD )strlen( target ); for(DWORD i = 0 ; i < len ; i++ ) { ch = ( DWORD )target[i]; result = ( ( result << 8 ) | ch ) % 16777213UL; xor ^= ch; } return ( result | ( xor << 24 ) ); }