int _tmain(int argc, _TCHAR* argv[]) { _wsetlocale(LC_ALL, L"chs"); wprintf(L"------------------ 利用属性控制生成的类型库元数据 ------------------\n"); ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); ITweakCOMPtr comObj(__uuidof(TweakCOMObj)); if(comObj) { wprintf(L"调用ExposedMethod方法\n"); comObj->ExposedMethod(); wprintf(L"访问DemoProperty属性的值\n"); int result = comObj->DemoProperty; // 对属性的赋值语句会导致编译器错误 // 因为该属性的put方法,被设置为ComVisible(false) //comObj->DemoProperty = 0; comObj.Release(); } ::CoUninitialize(); wprintf(L"\n按任意键退出...\n"); _getch(); return 0; }
/* 输 入: lpszFileName(const wchar_t*) - [in]日志文件路径 输 出: - 功 能: 将错误调试信息写如日志文件 */ void LogErrorToFile(const wchar_t* lpszFileName, wchar_t* lpszFormat,...) { errno_t err; va_list args; va_start(args, lpszFormat); // 格式化命令为标准字符串 const int BUFFER_SIZE = 512; wchar_t szBuffer[BUFFER_SIZE]; // _ASSERT is VC only.If you use gcc,please use assert instead int nBuffRet = _vsnwprintf(szBuffer, BUFFER_SIZE, lpszFormat, args); _ASSERT(nBuffRet >= 0); // 使文件流支持Unicode下的中文. _wsetlocale(LC_ALL, L"CHS"); int nWriteRet = WriteFile(lpszFileName, szBuffer); _ASSERT(nWriteRet); if (!nWriteRet) { _get_errno(&err); wprintf(L"LogFile writes failed.Error code is %d\n", err); } va_end(args); }
int _tmain(int argc, _TCHAR *argv[]) { _wsetlocale(LC_ALL, L"korean"); //if (argc != 3) //{ // wprintf(L"usage : %s <pid> <dll_path>", argv[0]); // return -1; //} argv[1] = L"11424"; argv[2] = L"stealth.dll"; char *szDllName; int strSize = WideCharToMultiByte(CP_ACP, 0, argv[2], -1, NULL, 0, NULL, NULL); szDllName = new char[strSize]; WideCharToMultiByte(CP_ACP, 0, argv[2], -1, szDllName, strSize, 0, 0); DWORD pid; TCHAR *pEnd; pid = wcstol(argv[1], &pEnd, 10); if (injection(pid, szDllName) == FALSE) { errorLOG("injection()"); return -1; } return 0; }
int _tmain(int argc, TCHAR* argv[]) { _wsetlocale(LC_ALL, L"Korean") ; if(argc <2) return -1; wchar_t directory[MAX_STR_LEN] = L""; const DWORD maxBuf = 1024; wchar_t buf[maxBuf] = L""; DWORD readedByte = 0; for(int i =0; i<wcslen( argv[1] ); i++) directory[i] = (wchar_t)argv[1][i]; HANDLE hFile = CreateFile(directory,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile == INVALID_HANDLE_VALUE) { wprintf(L"Error Type-Open file : %s",directory); // 파일이 안열린것 } else { do{ if(ReadFile(hFile,buf,maxBuf,&readedByte,NULL) == false) { wprintf(L"Error Type-Read file : %s",directory); // 파일 못읽은것 break; } printf("%s",buf); // 유니코드 안될때 있으니까.. }while(readedByte==maxBuf); } CloseHandle(hFile); return 1; }
int main() { _wsetlocale(LC_CTYPE, L""); std::wstring source = L"abc,123,xyz\n\"\"\"10,0\"\"\",\"\"\"20\n0\",300\n"; csv_traits< wchar_t > traits; csv_string_stream< wchar_t > stream(source); while (!stream.eof()) { auto row = csv_parser< wchar_t >::get_row(stream, traits); auto pos = row.begin(); auto end = row.end(); for (; pos != end; ++pos) { wprintf(L"col: %s ", (*pos).c_str()); } wprintf(L"\n"); } return 0; }
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { HANDLE hMutex; INITCOMMONCONTROLSEX icex; _wsetlocale(LC_ALL, L"JPN"); hInst = hInstance; CreateConfigPath(); hMutex = CreateMutexW(NULL, FALSE, cnfmutexname); if(hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS) { return 0; } icex.dwSize = sizeof(icex); icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES | ICC_PROGRESS_CLASS; InitCommonControlsEx(&icex); CreateProperty(); return 0; }
//---------------------------------------------------------------------------// void CNativeXMLReader::SetLocale(const WCHAR_T* loc) { dfCompDebugMsg("SetLocale"); #ifndef __linux__ _wsetlocale(LC_ALL, loc); #else int size = 0; char *mbstr = 0; wchar_t *tmpLoc = 0; convFromShortWchar(&tmpLoc, loc); size = wcstombs(0, tmpLoc, 0)+1; mbstr = new char[size]; if (!mbstr) { delete[] tmpLoc; return; } memset(mbstr, 0, size); size = wcstombs(mbstr, tmpLoc, wcslen(tmpLoc)); setlocale(LC_ALL, mbstr); delete[] tmpLoc; delete[] mbstr; #endif }
void InitializeServer(void) { WSADATA wsadata; _wsetlocale(LC_ALL, L"korean"); // Initialize Winsock // WSAStartup() : 프로그램에서 사용할 췬속 버전을 요청함으로써 윈속 라이브러리(WS2_32.DLL)를 초기화 하는 역할 // msdn - The WSAStartup function initiates use of Winsock DLL bt a process // MAKEWORD(2,2) : 프로그램이 요구하는 최상위 윈속 버전, 하위 8비트에 주 버전, 상위 8비트에 부 버전을 넣어서 전달 // : 만일 윈속 3.2 버전을 사용을 요청한다면 0x0203 또는 MAKEWORD(3,2)를 사용 // wsadata : 윈도우 운영체제가 제공하는 윈속 구현에 관한 정보(프로그램이 실제로 사용하게 될 윈속 버전, // : 시스템이 지원하는 윈속 최상위 버전 등)를 얻을 수 있음. 하지만 실제로 이런 정보 사용 X if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) { DisplayDebugText("InitializeServer :: WSAStartup Fail !!"); exit(1); } // Create IOCP kernel object // if last argument is 0, Use kernel object by core count // CreateIoCompletionPort() : 입출력 완료 포트를 새로 생성. // : 입출력 롼료 포트란 비동기 입출력 결과와 이 결과를 처리할 스레드에 관한 정보를 담고 있는 구조 // msdn - Creates an input/output (I/O) completion port and associates it with a specified file handle, // or reates an I/O completion port that is not yet associated with a file handle, allowing association at a later time. ghIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 0); if (NULL == ghIOCP) { DisplayDebugText("InitializeServer :: CreateIoCompletionPort Fail !!"); exit(1); } return; }
//------------------------------------------------------------------------------------------------ void RshError::PrintError(U32 error, RSH_LANGUAGE language, bool includeSystemErrorInfo) { #if defined(RSH_MSWINDOWS) _wsetlocale( LC_ALL, L"Russian" ); #elif defined(RSH_LINUX) setlocale( LC_ALL, "ru_RU.utf8" ); #endif if(error != RSH_API_SUCCESS) { if(language == RSH_LANGUAGE_RUSSIAN) std::wcout<< rshUTF16("--ОШИБКА[0x"); else std::wcout<<std::endl<< rshUTF16("--ERROR[0x"); wchar_t bufferRshApi[4096]; U32 res = RshError::GetErrorDescriptionUTF16(error & ~0xffff, bufferRshApi,4096,language); if(res == RSH_API_SUCCESS) { std::wcout << std::hex << (error & 0xffff0000) << rshUTF16("]-- ") << bufferRshApi<<std::endl ; } else { std::wcout <<rshUTF16("Couldn't format error message - GetErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res; } if(includeSystemErrorInfo && (error & 0xffff) ) { wchar_t buffer[4096]; U32 res = RshError::GetSystemErrorDescriptionUTF16( error & 0xffff, buffer, 4096 ); if(res == RSH_API_SUCCESS) { if(language == RSH_LANGUAGE_RUSSIAN) std::wcout<<std::endl<<rshUTF16("Системная ошибка ["); else std::wcout<<std::endl<<rshUTF16("System error ["); std::wcout<<std::dec<< (error & 0xffff)<<rshUTF16("]: "); std::wcout<< buffer<<std::endl; } else { std::wcout <<rshUTF16("Couldn't format error message - GetSystemErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res; } } } else { if(language == RSH_LANGUAGE_RUSSIAN) std::wcout<<std::endl<< rshUTF16("--УСПЕХ--")<<std::endl; else std::wcout<<std::endl<< rshUTF16("--SUCCESS--")<<std::endl; } }
// LocaleBase void ComponentBaseImpl::SetLocale(const WCHAR_T* loc) { #ifndef __linux__ _wsetlocale(LC_ALL, loc); #else //We convert in char* char_locale //also we establish locale //setlocale(LC_ALL, char_locale); #endif }
/*------------------------------------------- main関数 --------------------------------------------*/ int wmain(int argc, WCHAR* argv[]) { HRESULT hr; // ロケールを設定 _wsetlocale(LC_ALL, L"Japanese"); // ********************************************************** // Direct3D11デバイスの作成 hr = CreateDevice(); // ********************************************************** // コンピュート・シェーダの作成 if (SUCCEEDED(hr)) hr = CreateShader(); // ********************************************************** // 定数バッファの作成 if (SUCCEEDED(hr)) hr = CreateCBuffer(); // ********************************************************** // リソースの作成 if (SUCCEEDED(hr)) hr = CreateResource(); // ********************************************************** // シェーダ リソース ビューの作成 if (SUCCEEDED(hr)) hr = CreateSRV(); // ********************************************************** // アンオーダード・アクセス・ビューの作成 if (SUCCEEDED(hr)) hr = CreateUAV(); // ********************************************************** // コンピュート・シェーダを使った演算 if (SUCCEEDED(hr)) ComputeShader(); // ********************************************************** // 開放 SAFE_RELEASE(g_pUAV[1]); SAFE_RELEASE(g_pUAV[0]); SAFE_RELEASE(g_pSRV[1]); SAFE_RELEASE(g_pSRV[0]); SAFE_RELEASE(g_pReadBackBuffer); SAFE_RELEASE(g_pBuffer[1]); SAFE_RELEASE(g_pBuffer[0]); SAFE_RELEASE(g_pCBuffer); SAFE_RELEASE(g_pComputeShader); SAFE_RELEASE(g_pImmediateContext); SAFE_RELEASE(g_pD3DDevice); return 0; }
//------------------------------------------------------------------------------------------------ void RshError::PrintErrorDebug(U32 error, wchar_t* message, bool includeSystemErrorInfo) { #if defined(RSH_MSWINDOWS) _wsetlocale( LC_ALL, L"Russian" ); #elif defined(RSH_LINUX) setlocale( LC_ALL, "ru_RU.utf8" ); #endif RSH_LANGUAGE language = RSH_LANGUAGE_ENGLISH; if(error != RSH_API_SUCCESS) { std::wcout<<std::endl<<rshUTF16("--ERROR[0x"); wchar_t bufferRshApi[4096]; U32 res = RshError::GetErrorDescriptionUTF16(error & ~0xffff, bufferRshApi,4096,language); if(res == RSH_API_SUCCESS) { std::wcout << std::hex << (error & 0xffff0000) << rshUTF16("]-- "); if(message) std::wcout<<message; else std::wcout<<rshUTF16("~~!wchar_t* message points to NULL!~~"); std::wcout<<rshUTF16(": ")<< bufferRshApi<<std::endl ; } else { std::wcout <<rshUTF16("Couldn't format error message - GetErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res; } if(includeSystemErrorInfo && (error & 0xffff) ) { wchar_t buffer[4096]; U32 res = RshError::GetSystemErrorDescriptionUTF16( error & 0xffff, buffer, 4096 ); if(res == RSH_API_SUCCESS) { std::wcout<<std::endl<<rshUTF16("System error ["); std::wcout<<std::dec<< (error & 0xffff)<<rshUTF16("]: "); std::wcout<< buffer<<std::endl; } else { std::wcout <<rshUTF16("Couldn't format error message - GetSystemErrorDescriptionUTF16 failed with code 0x")<<std::hex<<res; } } } else { std::wcout<<std::endl<< rshUTF16("--SUCCESS-- ")<<message<<std::endl; } }
//---------------------------------------------------------------------------// void CAddInNative::SetLocale(const WCHAR_T* loc) { #ifndef __linux__ _wsetlocale(LC_ALL, loc); #else //We convert in char* char_locale //also we establish locale //setlocale(LC_ALL, char_locale); #endif }
int main() { _wsetlocale(LC_ALL, L""); wchar_t* a = L"hello"; wchar_t* b = L"您好"; printf("%ls size is %d\n", a, wcslen(a)); printf("%ls size is %d\n", b, wcslen(b)); printf("size is %d\n", sizeof(a[0])); getchar(); return 0; }
int _tmain(int argc, _TCHAR* argv[]) { _wsetlocale(LC_ALL, L"Korean") ; wchar_t data[MAX_PATH] = L"hihihi"; DWORD dwTreadID; HANDLE hTread = CreateThread( NULL, 0, func,(LPVOID)data, 0, &dwTreadID); while(1); return 0; }
int main() { _wsetlocale(LC_ALL, L""); int myIntValue = 20; wchar_t m_reportFileName[256]; wchar_t a = L'中'; swprintf_s(m_reportFileName, 256, L"%wc,%d", a, myIntValue); printf("%d\n", wcslen(m_reportFileName)); wprintf(L"%s\n", m_reportFileName); getchar(); }
wchar_t* _wsetlocale_map(int category, const wchar_t *locale) { wchar_t *ret = _wsetlocale(category, locale); for (wchar_t c = 0; c < 256; ++c) { g_mapToLower[c] = towlower(c); g_mapToUpper[c] = towupper(c); } return ret; }
ForceInline Void main2(Int argc, WChar **argv) { FILE *fp; LPVoid lpBuffer, lpEndOfBuffer; UInt32 BufferSize, FileSize; ConvertScriptToUnicode(argc, argv); return; BufferSize = 0x1000; lpBuffer = malloc(BufferSize); _wsetlocale(LC_CTYPE, L""); for (Int32 i = 1; i != argc; ++i) { fp = _wfopen(*++argv, L"rb+"); if (!fp) { _wperror(*argv); continue; } FileSize = fsize(fp); if (FileSize > BufferSize) { BufferSize = FileSize; lpBuffer = realloc(lpBuffer, BufferSize); } fread(lpBuffer, FileSize, 1, fp); fclose(fp); if (*(PUInt16)lpBuffer != 0xFEFF) { wprintf(L"%s\nsupport unicode only\n\n", *argv); fclose(fp); continue; } lpEndOfBuffer = (PByte)lpBuffer + FileSize; ProcessFile((PByte)lpBuffer + 2, lpEndOfBuffer, *argv); } free(lpBuffer); }
ForceInline Void main2(Int argc, WChar **argv) { _wsetlocale(LC_CTYPE, L""); { CFontSubSet fss(argc, argv); if (fss.ParseCmdLine() == FALSE) { _tprintf(_T("Parse command line failed.\n")); } else if (fss.ParseAss() == FALSE) { _tprintf(_T("Parse ass file failed.\n")); } else if (fss.SubSet() == FALSE) { _tprintf(_T("Subset failed.\n")); } } }
int logger_init(struct logger * inst, struct skynet_context *ctx, const char * parm) { if (parm) { inst->handle = fopen(parm,"w"); if (inst->handle == NULL) { return 1; } inst->close = 1; } else { inst->handle = stdout; } #ifdef _MSC_VER _wsetlocale(0, L"chs"); #endif if (inst->handle) { skynet_callback(ctx, inst, _logger); skynet_command(ctx, "REG", ".logger"); return 0; } return 1; }
int main() { _wsetlocale(LC_CTYPE, L""); std::wstring source = L"abc,12\"\"3,xyz\r\n\"\"\"10,0\"\"\",\"\"\"20\n0\",300\n\"\"123"; /* output col: abc col: 12"3 col: xyz(\r not include) col: "10,0" col: "20 0 col: 300 col: "123 */ csv_traits<wchar_t> traits; csv_string_stream<wchar_t> stream(source); wprintf(L"src: %s\n\n", source.c_str()); while (!stream.is_eof()) { auto row = csv_parser<wchar_t>::get_row(stream, traits); auto pos = row.begin(); auto end = row.end(); for (; pos != end; ++pos) { wprintf(L"col: %s\n", (*pos).data()); } wprintf(L"\n"); } return 0; }
int _tmain(int argc, _TCHAR* argv[]) { LThreadType = THREAD_MAIN; _wsetlocale( 0, L"Korean" ); /// for dump on crash SetUnhandledExceptionFilter(ExceptionFilter); /// Global Managers GClientSessionManager = new ClientSessionManager; GIocpManager = new IocpManager; if (false == GIocpManager->Initialize()) return -1; if (false == DbHelper::Initialize(SQL_SERVER_CONN_STR, GIocpManager->GetIoThreadCount())) return -1; if (false == GIocpManager->StartIoThreads()) return -1; printf_s("Start Server\n"); GIocpManager->StartAccept(); ///< block here... GIocpManager->Finalize(); printf_s("End Server\n"); DbHelper::Finalize(); delete GIocpManager; delete GClientSessionManager; return 0; }
void CMUCHighlight::init() { DBVARIANT dbv = {0}; if (m_fInitialized) cleanup(); // clean up first, if we were already initialized m_fInitialized = true; if (0 == db_get_ts(0, CHAT_MODULE, "HighlightWords", &dbv)) { m_TextPatternString = dbv.ptszVal; _wsetlocale(LC_ALL, L""); wcslwr(m_TextPatternString); } if (0 == db_get_ts(0, CHAT_MODULE, "HighlightNames", &dbv)) m_NickPatternString = dbv.ptszVal; m_dwFlags = M.GetByte(CHAT_MODULE, "HighlightEnabled", MATCH_TEXT); m_fHighlightMe = (M.GetByte(CHAT_MODULE, "HighlightMe", 1) ? true : false); tokenize(m_TextPatternString, m_TextPatterns, m_iTextPatterns); tokenize(m_NickPatternString, m_NickPatterns, m_iNickPatterns); }
void CLanguage::ParseLanguageFile( const CUString& strFileName ) { BOOL bResult = TRUE; DWORD dwRevision = 0; FILE* pFile = NULL; CUString strFullFileName = m_strLanguageDir + _W("\\lang\\") + strFileName + m_strLangFileExt; CUStringConvert strCnv; pFile = CDexOpenFile( strFullFileName, _W( "r" ) ); if ( NULL != pFile ) { CHAR lpszRead[ 1024 ]; int nStart = 0; int nStop = 0; CUString strRead; memset( lpszRead, 0, sizeof( lpszRead ) ); while ( fgets( lpszRead, sizeof( lpszRead ), pFile ) ) { bool bHasNumber = false; bool bIsMenu = false; bool bIsDialog = false; bool bHasString = false; DWORD nIndex = 0; CLangElement newElement; strRead = _T( "" ); for ( nIndex = 0; nIndex< strlen( lpszRead ); nIndex++ ) { if ( ( lpszRead[ nIndex ] != 0x0A ) && ( lpszRead[ nIndex ] != 0x0D ) ) { strRead += (TCHAR)lpszRead[ nIndex ]; } } TranslateTab( strRead ); nStart = strRead.Find( _T( '#' ) ); if ( nStart >= 0 ) { if ( ( nStart + 1 ) == strRead.Find( _T( 'M' ) ) ) { nStart++; bIsMenu = TRUE; } else if ( ( nStart + 1 ) == strRead.Find( _T( 'D' ) ) ) { nStart++; bIsDialog = TRUE; } nStop = strRead.Find( _T( '#' ), nStart + 1 ); if ( nStop > 2 ) { CUString strID ( strRead.Mid( nStart + 1, nStop - nStart -1 ) ); swscanf( strID, _W( "%x" ), &newElement.nID ); bHasNumber = true; } } else { if ( strRead.Find( CODEPAGETAG ) == 0 ) { m_dwCodePageID = _wtoi( strRead.Mid( CODEPAGETAG.GetLength() ) ); } else if ( strRead.Find( LANGTAG ) == 0 ) { m_dwLangID = _wtoi( strRead.Mid( LANGTAG.GetLength() ) ); } else if ( strRead.Find( SUBLANGTAG ) == 0 ) { m_dwSubLangID = _wtoi( strRead.Mid( SUBLANGTAG.GetLength() ) ); } else if ( strRead.Find( REVISIONTAG ) == 0 ) { int nPos; nPos = strRead.Find( _W( ",v " ) ); if ( nPos >= 0 ) { float fVersion = 1.0f; swscanf( strRead.Mid( nPos+3,4 ), _W( "%f" ), &fVersion ); dwRevision = (DWORD)( 100 * ( fVersion + 0.005 ) ); } } } nStart = strRead.Find( '"' ); if ( nStart >= 0 ) { nStop = strRead.Find( '"', nStart + 1 ); if ( nStop > 2 ) { lpszRead[ 0 ] = '\0'; for ( nIndex = nStart + 1; nIndex < (DWORD)nStop; nIndex++) { lpszRead[ nIndex - nStart - 1] = (CHAR)strRead.GetAt( nIndex ); lpszRead[ nIndex - nStart ] = '\0'; } newElement.strValue = CUString( lpszRead, m_dwCodePageID ); bHasString = true; } } if ( bHasString && bHasNumber ) { if ( bIsMenu ) { m_vMenus.push_back( newElement ); } else if ( bIsDialog ) { m_vDialogs.push_back( newElement ); } else { m_vStrings.push_back( newElement ); } } memset( lpszRead, 0, sizeof( lpszRead ) ); } fclose( pFile ); } #ifdef UNICODE TCHAR* pTest = _wsetlocale( LC_ALL, GetString( 99 ) ); #else TCHAR* pTest = setlocale( LC_ALL, strCnv.ToT( GetString( 99 ) ) ); #endif SetThreadLocale( MAKELCID( m_dwLangID, m_dwSubLangID ) ); setlocale( LC_NUMERIC, "English" ); }
int wmain(int argc, wchar_t* argv[]) { _wsetlocale(LC_ALL, L""); if (argc == 2) { OCScript::Core osc; vector<wstring> rawLines; FILE* stream; int openError = _wfopen_s(&stream, argv[1], L"r, ccs=UTF-8"); if (openError == 0 && stream) { while (feof(stream) == 0) { wchar_t str[256]; fgetws(str, sizeof(str), stream); if (ferror(stream) != 0) { fclose(stream); wcerr << L"読み込みに失敗しました" << endl; return -1; } rawLines.push_back(str); } fclose(stream); } else { wcerr << L"ファイルオープンに失敗しました" << endl; return -1; } try { // コマンド登録 osc.AddCommand(&SampleCommand1::GetInstance()); osc.AddCommand(&SampleCommand2::GetInstance()); // スクリプトの読み込み osc.LoadScript(rawLines); while (!osc.IsEndOfScript()) { // 現在の行を実行 osc.ExecuteCurrentLine(); // 更新(描画処理や計算処理などを含む) osc.TriggerPreUpdate(); osc.TriggerUpdate(); } } catch (exception ex) { cerr << ex.what() << endl; return -1; } } return 0; }
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASSEXW wc; HWND hWnd; WSADATA wsaData; PSECURITY_DESCRIPTOR psd; SECURITY_ATTRIBUTES sa; _wsetlocale(LC_ALL, L"JPN"); CreateConfigPath(); if(ConvertStringSecurityDescriptorToSecurityDescriptorW(krnlobjsddl, SDDL_REVISION_1, &psd, NULL)) { sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = psd; sa.bInheritHandle = FALSE; hMutex = CreateMutexW(&sa, FALSE, mgrmutexname); if(hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS) { LocalFree(psd); return 0; } LocalFree(psd); } else { return 0; } WSAStartup(WINSOCK_VERSION, &wsaData); ZeroMemory(&ftConfig, sizeof(ftConfig)); if(IsFileUpdated(pathconfigxml, &ftConfig)) { LoadConfig(); } ZeroMemory(&ftSKKDic, sizeof(ftSKKDic)); if(IsFileUpdated(pathskkdic, &ftSKKDic)) { MakeSKKDicPos(); } InitLua(); hInst = hInstance; ZeroMemory(&wc, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.hInstance = hInst; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = DictionaryManagerClass; RegisterClassExW(&wc); #ifdef _DEBUG hWnd = CreateWindowW(DictionaryManagerClass, TextServiceDesc, WS_OVERLAPPEDWINDOW, 0, 0, 600, 800, NULL, NULL, hInst, NULL); #else hWnd = CreateWindowW(DictionaryManagerClass, TextServiceDesc, WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInst, NULL); #endif if(!hWnd) { UninitLua(); WSACleanup(); return 0; } #ifdef _DEBUG ShowWindow(hWnd, SW_MINIMIZE); #else ShowWindow(hWnd, SW_HIDE); #endif UpdateWindow(hWnd); while(GetMessageW(&msg, NULL, 0, 0)) { if(!TranslateAcceleratorW(msg.hwnd, NULL, &msg)) { TranslateMessage(&msg); DispatchMessageW(&msg); } } UninitLua(); WSACleanup(); return (int) msg.wParam; }
//---------------------------------------------------------------------------// void CAddInNCR5976::SetLocale(const WCHAR_T* loc) { Debug::log("CAddInNCR5976::SetLocale"); _wsetlocale(LC_ALL, loc);
int wmain (int argc,wchar_t ** argv) { CAppData::stdfunc(); _wsetlocale(LC_CTYPE,L".OCP"); SetRegKey(argc,argv); if (!SetLanguageSpecifigHandles(argv[0])) return 1; CArrayFP<CDatabase*> aDatabases; WORD wCurrentThread=0; aDatabases.Add(CDatabase::FromDefaults(TRUE)); aDatabases[0]->SetNamePtr(alloccopy(L"DEFAULTX")); aDatabases[0]->SetThreadId(wCurrentThread); int i,helps=0; #ifndef WIN32 if (getenv("TZ")==NULL) fprintf(stderr,"Timezone is not set. Database may contain invalid file times.\nFor example type "SET TZ=GMT+1" for central european time.\n"); #endif for (i=1;i<argc;i++) { if (argv[i][0]=='-' || argv[i][0]=='/') { switch (argv[i][1]) { case L'X': if (argv[i][2]==L'\0') { if (i<argc-1) i++; // RegKeyName already set } break; case 'l': case 'L': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else if (argv[i][2]=='1') { aDatabases.GetLast()->AddLocalRoots(); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } else { CStringW* pStr; if (argv[i][2]==L'\0' && i+1<argc) pStr=new CStringW(argv[++i]); else pStr=new CStringW(argv[i]+2); if ((*pStr)[0]==L'\"') pStr->DelChar(0); if (pStr->LastChar()==L'\"') pStr->DelLastChar(); while (pStr->LastChar()==L'\\') pStr->DelLastChar(); if (pStr->GetLength()>1) { pStr->ReplaceChars('/','\\'); if ((*pStr)[1]==':' && pStr->GetLength()==2) aDatabases.GetLast()->AddRoot(pStr->GiveBuffer()); else if (FileSystem::IsDirectory(*pStr)) aDatabases.GetLast()->AddRoot(pStr->GiveBuffer()); else fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr); } else fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr); delete pStr; aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 'e': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else { CStringW* pStr; if (argv[i][2]=='\0' && i+1<argc) pStr=new CStringW(argv[++i]); else pStr=new CStringW(argv[i]+2); if ((*pStr)[0]==L'\"') pStr->DelChar(0); if (pStr->LastChar()==L'\"') pStr->DelLastChar(); while (pStr->LastChar()==L'\\') pStr->DelLastChar(); if (pStr->GetLength()>0) aDatabases.GetLast()->SetExcludedFiles(*pStr); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 'E': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else { CStringW* pStr; if (argv[i][2]=='\0' && i+1<argc) pStr=new CStringW(argv[++i]); else pStr=new CStringW(argv[i]+2); if ((*pStr)[0]==L'\"') pStr->DelChar(0); if (pStr->LastChar()==L'\"') pStr->DelLastChar(); while (pStr->LastChar()==L'\\') pStr->DelLastChar(); if (pStr->GetLength()>1) { pStr->ReplaceChars('/','\\'); if (!aDatabases.GetLast()->AddExcludedDirectory(*pStr)) fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr); } else fwprintf(stderr,ID2W(IDS_UPDATEDB32DIRECTORYISNOTVALID),(LPCWSTR)*pStr); delete pStr; aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 't': case 'T': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else if (argv[i][2]==L'c' || argv[i][2]==L'C') { if (argv[i][3]==L'\0') aDatabases.GetLast()->SetCreatorPtr(alloccopy(argv[++i])); else aDatabases.GetLast()->SetCreatorPtr(alloccopy(argv[i]+2)); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } else if (argv[i][2]==L'd' || argv[i][2]==L'D') { if (argv[i][3]==L'\0') aDatabases.GetLast()->SetDescriptionPtr(alloccopy(argv[++i])); else aDatabases.GetLast()->SetDescriptionPtr(alloccopy(argv[i]+2)); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 'i': case 'I': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else { aDatabases.GetLast()->SetFlag(CDatabase::flagIncrementalUpdate,TRUE); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 'c': case 'C': if (wcsncmp(aDatabases.GetLast()->GetName(),L"PARAMX",6)!=0 && wcsncmp(aDatabases.GetLast()->GetName(),L"DEFAULTX",8)!=0) wprintf(ID2W(IDS_UPDATEDB32CANNOTCHANGELOADED),aDatabases.GetLast()->GetName()); else if (argv[i][2]==L'A' || argv[i][2]==L'a') { aDatabases.GetLast()->SetFlag(CDatabase::flagAnsiCharset,TRUE); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } else if (argv[i][2]==L'U' || argv[i][2]==L'u') { aDatabases.GetLast()->SetFlag(CDatabase::flagAnsiCharset,FALSE); aDatabases.GetLast()->SetNamePtr(alloccopy(L"PARAMX")); } break; case 'N': case 'n': wCurrentThread++; break; case 'q': case 'Q': nQuiet=TRUE; break; case 'v': case 'V': printf("%s\n",szVersionStr); return 0; case 'd': { // Using database file CStringW sFile; if (argv[i][2]=='\0') sFile=argv[++i]; else sFile=(argv[i]+2); sFile.ReplaceChars('/','\\'); if (aDatabases.GetSize()==1 && wcscmp(aDatabases[0]->GetName(),L"DEFAULTX")==0) { aDatabases[0]->SetNamePtr(alloccopy(L"PARAMX")); aDatabases[0]->SetArchiveNamePtr(sFile.GiveBuffer()); } else { CDatabase* pDatabase=CDatabase::FromFile(sFile,(int)sFile.GetLength()); if (pDatabase!=NULL) { aDatabases.Add(pDatabase); pDatabase->SetNamePtr(alloccopy(L"PARAMX")); pDatabase->SetThreadId(wCurrentThread); } } } break; case 'D': { // Loading database 'name' from registry, cannot be changed CStringW sName; if (argv[i][2]=='\0') sName=argv[++i]; else sName=(argv[i]+2); if (CDatabase::FindByName(aDatabases,sName,(int)sName.GetLength())==NULL) { CDatabase* pDatabase=CDatabase::FromName(HKCU, CString(g_szRegKey)+"\\Databases",sName); if (pDatabase!=NULL) { pDatabase->SetFlag(CDatabase::flagGlobalUpdate); // Is only default loaded if (aDatabases.GetSize()==1 && wcscmp(aDatabases[0]->GetName(),L"DEFAULTX")==0) { delete aDatabases[0]; aDatabases[0]=pDatabase; } else { aDatabases.Add(pDatabase); pDatabase->SetThreadId(wCurrentThread); } } } } break; case 'h': case 'H': case '?': helps=1; break; default: helps=1; break; } } } if (helps==1) { #ifdef WIN32 fprintf(stdout,"%s\n",szVersionStr); #else fprintf(stdout,"%s\nusage updatedb",szVersionStr); #endif HRSRC hRc=FindResource(GetLanguageSpecificResourceHandle(),MAKEINTRESOURCE(IDR_UPDATEDBHELP),"HELPTEXT"); HGLOBAL hGlobal=LoadResource(GetLanguageSpecificResourceHandle(),hRc); LPCSTR pStr=(LPCSTR)LockResource(hGlobal); // Counting length int len; for (len=0;pStr[len]!='\0';len++) { if (pStr[len]=='E' && pStr[len+1]=='O' && pStr[len+2]=='F') break; } fwrite(pStr,1,len,stdout); FreeLibrary(GetLanguageSpecificResourceHandle()); return 1; } // Checking databases // First, check that there is database if (aDatabases.GetSize()==0) CDatabase::LoadFromRegistry(HKCU,CString(g_szRegKey)+"\\Databases",aDatabases); else if (aDatabases.GetSize()==1 && wcsncmp(aDatabases[0]->GetName(),L"DEFAULTX",8)==0) { aDatabases.RemoveAll(); CDatabase::LoadFromRegistry(HKCU,CString(g_szRegKey)+"\\Databases",aDatabases); // No registry values? if (aDatabases.GetSize()==0) { aDatabases.Add(CDatabase::FromDefaults(TRUE)); aDatabases[0]->SetNamePtr(alloccopy(L"DEFAULTX")); } } CDatabase::CheckValidNames(aDatabases); CDatabase::CheckDoubleNames(aDatabases); for (int i=0;i<aDatabases.GetSize();) { if (!aDatabases[i]->IsGloballyUpdated()) aDatabases.RemoveAt(i); else { if ((wcsncmp(aDatabases[i]->GetName(),L"PARAMX",6)==0 || wcsncmp(aDatabases[i]->GetName(),L"DEFAULTX",8)==0)) { BOOL bNameChanged=FALSE; if (aDatabases[i]->GetRoots()==0) { BOOL bFree; LPWSTR pFile=aDatabases[i]->GetResolvedArchiveName(bFree); CDatabaseInfo* pDatabaseInfo=CDatabaseInfo::GetFromFile(pFile); if (bFree) delete[] pFile; if (pDatabaseInfo!=NULL) { CDatabase* pDatabase; if (!pDatabaseInfo->sExtra2.IsEmpty()) pDatabase=CDatabase::FromExtraBlock(pDatabaseInfo->sExtra2); if (pDatabase==NULL && !pDatabaseInfo->sExtra1.IsEmpty()) pDatabase=CDatabase::FromExtraBlock(pDatabaseInfo->sExtra1); wprintf(ID2W(IDS_UPDATEDB32USINGEXISTINGSETTINGS), aDatabases[i]->GetArchiveName(),pDatabase->GetName()); pDatabase->SetArchiveType(aDatabases[i]->GetArchiveType()); pDatabase->SetArchiveName(aDatabases[i]->GetArchiveName()); delete aDatabases[i]; aDatabases[i]=pDatabase; delete pDatabaseInfo; bNameChanged=TRUE; } } if (!bNameChanged) { ULONG_PTR nFirst=LastCharIndex(aDatabases[i]->GetArchiveName(),L'\\')+1; int nLength=LastCharIndex(aDatabases[i]->GetArchiveName()+nFirst,L'.'); if (nLength==-1) nLength=istrlenw(aDatabases[i]->GetArchiveName()+nFirst); aDatabases[i]->SetNamePtr(alloccopy(aDatabases[i]->GetArchiveName()+nFirst,nLength)); } } i++; } } // Starting to update WORD dwTheads=CDatabase::CheckIDs(aDatabases); if (dwTheads==0) { FreeLibrary(GetLanguageSpecificResourceHandle()); return FALSE; } if (dwTheads==1) { CDatabaseUpdater Updater(aDatabases,aDatabases.GetSize(),UpdateProc); Updater.Update(FALSE); } else { WORD wThread; ppUpdaters=new CDatabaseUpdater*[dwTheads+1]; for (wThread=0;wThread<dwTheads;wThread++) { ppUpdaters[wThread]=new CDatabaseUpdater(aDatabases,aDatabases.GetSize(), UpdateProc,wThread,(DWORD)0); } ppUpdaters[dwTheads]=NULL; // Starting DWORD dwRunning=0; UpdateError ueCode; for (wThread=0;wThread<dwTheads;wThread++) { ueCode=ppUpdaters[wThread]->Update(TRUE); if (ueCode==ueSuccess) dwRunning++; else { delete ppUpdaters[wThread]; ppUpdaters[wThread]=UPDATER_EXITED(ueCode); } } if (dwRunning==0) delete ppUpdaters; else { while (ppUpdaters!=NULL) Sleep(100); } } FinishRegKey(); FreeLibrary(GetLanguageSpecificResourceHandle()); return 1; }
bool create_bob_txt() { // current directory 를 구한다. wchar_t *buf = NULL; uint32_t buflen = 0; buflen = GetCurrentDirectoryW(buflen, buf); if (0 == buflen) { print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError()); return false; } buf = (PWSTR)malloc(sizeof(WCHAR) * buflen); if (0 == GetCurrentDirectoryW(buflen, buf)) { print("err, GetCurrentDirectoryW() failed. gle = 0x%08x", GetLastError()); free(buf); return false; } wchar_t file_name[260]; // bob1에서 생성한 파일을 읽을 준비. if (!SUCCEEDED(StringCbPrintfW( file_name, sizeof(file_name), L"%ws\\bob2.txt", buf))) { print("err, can not create file name"); free(buf); return false; } free(buf); buf = NULL; HANDLE file_handle = CreateFileW( // 메모리에 매핑할 파일의 핸들을 얻는다. 실패 시 INVALID_HANDLE_VALUE를 반환 (LPCWSTR)file_name, GENERIC_READ, NULL, NULL, OPEN_EXISTING, //기존 파일 FILE_ATTRIBUTE_NORMAL, NULL ); if (INVALID_HANDLE_VALUE == file_handle) { print("err, CreateFile(%ws) failed, gle = %u", file_name, GetLastError()); return false; } LARGE_INTEGER fileSize; if (TRUE != GetFileSizeEx(file_handle, &fileSize)) { // 매핑할 파일의 전체 크기를 구한다. print("err, GetFileSizeEx(%ws) failed, gle = %u", file_name, GetLastError()); CloseHandle(file_handle); return false; } _ASSERTE(fileSize.HighPart == 0); // 식을 계산하고 결과가 false 일때, 진단 메시지를 출력하고 프로그램을 중단 /* assert 매크로는 일반적으로 프로그램이 올바르게 작동하지 않을때 false 로 계산하기 위해 expression 인수를 구현함으로써 프로그램을 개발하는 동안 논리적인 오류들을 식별하기 위해 사용된다. 디버깅이 완전히 끝나면, NDEBUG 식별자를 정의하여 소스 파일을 수정하지 않고 어썰션 검사를 끌 수 있다. */ if (fileSize.HighPart > 0) { print("file size = %I64d (over 4GB) can not handle. use FileIoHelperClass", fileSize.QuadPart); CloseHandle(file_handle); return false; } DWORD file_size = (DWORD)fileSize.QuadPart; /* 앞서 CreateFile()을 호출한 이유는 파일 매핑을 수행할 파일의 물리 저장소를 운영체제에게 알려주기 위해. 매핑할 파일을 대상으로 파일 매핑 오브젝트를 생성한다. 지정 파일을 파일 매핑 오브젝트와 연결하며, => reserve 파일 매핑 오브젝트를 위한 충분한 물리 저장소가 존재한다는 것을 확인시키는 작업. 실패시 NULL 반환 */ HANDLE file_map = CreateFileMapping( file_handle, NULL, PAGE_READONLY, 0, 0, NULL ); if (NULL == file_map) { print("err, CreateFileMapping(%ws) failed, gle = %u", file_name, GetLastError()); CloseHandle(file_handle); return false; } // PCHAR : A pointer to a CHAR. This type is declared in WinNT.h as follows : typedef CHAR *PCHAR PCHAR file_view = (PCHAR)MapViewOfFile( file_map, FILE_MAP_READ, 0, 0, 0 ); if (file_view == NULL) { print("err, MapViewOfFile(%ws) failed, gle = %u", file_name, GetLastError()); CloseHandle(file_map); CloseHandle(file_handle); return false; } // UTF-8 -> UTF-16(UCS-2 지원) wchar_t *convchar5 = Utf8MbsToWcs(file_view); _wsetlocale(LC_ALL, L"korean"); wprintf(L"%s\n", convchar5); // 뷰로부터 읽은 데이터를 콘솔에 출력. UnmapViewOfFile(file_view); // 프로세스의 주소 공간 내의 특정 영역에 매핑된 데이터 파일을 더 이상 유지하지 않음. 뷰를 해제. CloseHandle(file_map); CloseHandle(file_handle); return true; }
LONG CED6AsDecompiler::DumpToFile(ED6_ACTION_SCRIPT_INFO *pAsInfo, LPWSTR pszAsFile, LPWSTR pszOutput) { LONG Status; CHAR Buffer[0x400]; CFileDisk file; Status = CreateDefinition(pszAsFile, Buffer); AS_IF_FAIL_RETURN(Status); Status = ASDECL_ERROR_UNKNOWN; LOOP_ONCE { if (!file.Create(pszOutput)) AS_BREAK(Status, ASDECL_ERROR_CREATE_FILE); _wsetlocale(LC_CTYPE, L""); WriteScr( "@_FILE \"debug_%S\"\n" "@_INCLUDE \"%s\"\n" "\n", findnamew(pszAsFile), NAME_DEFINITION_FILE); WriteScr( "@%s %d\n" "\n", NAME_HEADER_UNKNOWN, pAsInfo->Unknown); WriteScr( "(%s:s)\n" "(%s:s)\n" "(%s:s)\n" "\n", LABEL_CRAFT_OFFSET_TABLE, LABEL_CRAFT_OFFSET_TABLE_END, NAME_HEADER_UNKNOWN); WriteScr("; Char chip pattern info CH_Index, CH_DAT_Index, CP_Index, CP_DAT_Index\n"); CHAR_CHIP_PATTERN_INFO *pChipPtn = pAsInfo->pChrChipPtnInfo; for (ULONG Index = 0, Count = pAsInfo->ChrChipPtnCount; Count; ++Index, --Count) { WriteScr( " (0x%04X:s, 0x%04X:s, 0x%04X:s, 0x%04X:s)", pChipPtn->CHIndex, pChipPtn->CHDatIndex, pChipPtn->CPIndex, pChipPtn->CPDatIndex); ++pChipPtn; if (Index & 1) WriteScr("\n"); } WriteScr("\n[FF FF FF FF]\n\n"); WriteScr("; 3d model file\n"); for (LPSTR pszX3FileName = pAsInfo->pszXFileName; ; ) { LPSTR pString; ULONG Length; Length = StrLengthA(pszX3FileName) + 1; pString = *pszX3FileName == 0 ? NULL : AllocString(pszX3FileName, Length); WriteScr("\"%s\"\n", pString == NULL ? pszX3FileName : pString); FreeString(pString); if (*pszX3FileName == 0) { if (pszX3FileName != pAsInfo->pszXFileName) WriteScr("[%02X %02X]\n", pszX3FileName[1], pszX3FileName[2]); break; } pszX3FileName += Length; } WriteScr("\n#%s\n", LABEL_CRAFT_OFFSET_TABLE); ED6_AS_CRAFT_INFO *pCraft; ED6_INSTRUCTION *pInstruction; pCraft = pAsInfo->pCraftInfo; for (ULONG Index = 0, Count = pAsInfo->CraftCount; Count; ++pCraft, ++Index, --Count) { ULONG TrueIndex; if (pCraft->Offset == ED6_INVALID_OFFSET) { PBYTE p = (PBYTE)&pCraft->Offset; WriteScr("[%02X", *p++); for (ULONG Len = sizeof(ED6_INVALID_OFFSET) - 1; Len; --Len) WriteScr(" %02X", *p++); WriteScr("]\n"); continue; } pInstruction = UnlinkInstruction(pCraft->pInstruction); if (pInstruction == NULL) continue; TrueIndex = Index; for (ULONG i = 0; i != Index; ++i) { if (pInstruction->Offset == pAsInfo->pCraftInfo[i].Offset) { TrueIndex = i; break; } } GetCraftName(pAsInfo, TrueIndex, Buffer); WriteScr(" (%s:s)", Buffer); if (Index >=countof(g_szIntrinsicCraft) && (Index + 1 - countof(g_szIntrinsicCraft)) % 5 != 0) continue; WriteScr("\n"); } WriteScr("\n#%s\n\n", LABEL_CRAFT_OFFSET_TABLE_END); PBYTE pbFlags = pAsInfo->pbAsBuffer + pAsInfo->CraftOffsetTableEndOffset; WriteScr( "[%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X]\n\n", pbFlags[0], pbFlags[1], pbFlags[2], pbFlags[3], pbFlags[4], pbFlags[5], pbFlags[6], pbFlags[7], pbFlags[8], pbFlags[9], pbFlags[10], pbFlags[11], pbFlags[12], pbFlags[13], pbFlags[14], pbFlags[15], pbFlags[16]); Status = DumpCrafts(pAsInfo, file, Buffer); AS_IF_FAIL_BREAK(Status); Status = DumpFunctions(pAsInfo, file, Buffer); } return Status; }