約 2,912,857 件
https://w.atwiki.jp/bemani2dp/pages/4439.html
GENRE TITLE ARTIST bpm notes CLEAR RATE EDM Gimme a Big Beat kors k 138 n%(yyyy/mm/dd) 攻略・コメント 名前 コメント
https://w.atwiki.jp/sampleisbest/pages/135.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 StringBuiler アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト clrtest.cpp using namespace System; using namespace System Text; int main() { StringBuilder^ sb = gcnew StringBuilder; sb- Append("tako\n"); sb- Append("ika\n"); String^ s = sb- ToString(); Console Write(s); Console ReadLine(); return 0; } StringBuiler.c #define _CRT_SECURE_NO_WARNINGS #include stdio.h #include stdlib.h #include string.h typedef struct { char *str; int len; int extent; } StringBuilder; //============================================================================== void SBInit(StringBuilder *sb) { sb- len = 0; sb- extent = 16; sb- str = (char *)malloc(sb- extent); sb- str[0] = \0 ; } void SBTerm(StringBuilder *sb) { free(sb- str); } void SBAppend(StringBuilder *sb, const char *str) { int newLen; int newExtent; newLen = sb- len + strlen(str); newExtent = sb- extent; while (newExtent = newLen) { newExtent = 1; } if (sb- extent newExtent) { sb- extent = newExtent; sb- str = (char *)realloc(sb- str, sb- extent); fprintf(stderr, "newExtent=[%d]\n", newExtent); } strcpy(sb- str + sb- len, str); sb- len = newLen; } //============================================================================== int main(int argc, char *argv[], char *envp[]) { StringBuilder sb; SBInit( sb); while (*envp) { SBAppend( sb, *envp); SBAppend( sb, "\n"); envp++; } printf("%s", sb.str); SBTerm( sb); return 0; }
https://w.atwiki.jp/sampleisbest/pages/146.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 devcaps アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト devcaps.c #include tchar.h #include Windows.h #define pxtocm(px,dpi) ((px) * 2.54 / (dpi)) #define VarTrace(fmt,var) _tprintf(TEXT(#var)TEXT("=[")fmt##TEXT("]\n"), var) void PrintDevCaps(HDC hdc) { int nHorzRes= GetDeviceCaps(hdc, HORZRES); int nVertRes= GetDeviceCaps(hdc, VERTRES); int nPhysicalWidth= GetDeviceCaps(hdc, PHYSICALWIDTH); int nPhysicalHeight= GetDeviceCaps(hdc, PHYSICALHEIGHT); int nPhysicalOffsetX= GetDeviceCaps(hdc, PHYSICALOFFSETX); int nPhysicalOffsetY= GetDeviceCaps(hdc, PHYSICALOFFSETY); int nLogPixelsX= GetDeviceCaps(hdc, LOGPIXELSX); int nLogPixelsY= GetDeviceCaps(hdc, LOGPIXELSY); double dWidth = pxtocm(nPhysicalWidth ? nPhysicalWidth nHorzRes, nLogPixelsX); double dHeight = pxtocm(nPhysicalHeight ? nPhysicalHeight nVertRes, nLogPixelsY); VarTrace(TEXT("%d"), nHorzRes); VarTrace(TEXT("%d"), nVertRes); VarTrace(TEXT("%d"), nPhysicalWidth); VarTrace(TEXT("%d"), nPhysicalHeight); VarTrace(TEXT("%d"), nPhysicalOffsetX); VarTrace(TEXT("%d"), nPhysicalOffsetY); VarTrace(TEXT("%d"), nLogPixelsX); VarTrace(TEXT("%d"), nLogPixelsY); VarTrace(TEXT("%.4f cm"), dWidth); VarTrace(TEXT("%.4f cm"), dHeight); } int main() { PRINTDLG pd; HDC hdc; HGLOBAL hr; BOOL br; _tprintf(TEXT("\n[display]\n")); hdc = CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL); if (hdc == NULL) { return 1; } PrintDevCaps(hdc); br = DeleteDC(hdc); _tprintf(TEXT("\n[default printer]\n")); ZeroMemory( pd, sizeof pd); pd.lStructSize= sizeof pd; pd.Flags= PD_RETURNDEFAULT | PD_RETURNIC; br = PrintDlg( pd);// ウィンドウがないのでPrintDlgExの代用 if (br == FALSE) { return 1; } if (pd.hDC == NULL) { return 1; } PrintDevCaps(pd.hDC); br = DeleteDC(pd.hDC); hr = GlobalFree(pd.hDevMode); hr = GlobalFree(pd.hDevNames); return 0; } 実行 [display] nHorzRes=[1920] nVertRes=[1200] nPhysicalWidth=[0] nPhysicalHeight=[0] nPhysicalOffsetX=[0] nPhysicalOffsetY=[0] nLogPixelsX=[96] nLogPixelsY=[96] dWidth=[50.8000 cm] dHeight=[31.7500 cm] [default printer] nHorzRes=[6826] nVertRes=[4800] nPhysicalWidth=[7015] nPhysicalHeight=[4960] nPhysicalOffsetX=[70] nPhysicalOffsetY=[80] nLogPixelsX=[600] nLogPixelsY=[600] dWidth=[29.6968 cm] dHeight=[20.9973 cm]
https://w.atwiki.jp/sampleisbest/pages/274.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 WaveGraph アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode Waveファイル(PCM 11.025kHz 8bit mono)を想定。 WaveGraph.cpp // WaveGraph3 Waveファイルグラフ表示(自己相関) #pragma comment(lib, "winmm") #define _USE_MATH_DEFINES #include Windows.h #include tchar.h #include math.h #include vector using namespace std; typedef struct { int pos; int waveLen; int noteNum; double vol; } Wave; typedef vector Wave VWave; #define SAFE_FREE(p)if (p) { free(p); p = NULL; } #define NORM(b)((b - 128.0) / 128) #define log2(x)(log(x) / log(2.0)) #define A469 #define APP_NAMETEXT("WaveGraph") // 関数プロトタイプ宣言 void Trace(LPCTSTR format, ...); BOOL Load(LPTSTR pszFileName); BOOL ReadWaveFile(LPTSTR pszFileName); BOOL AnalyzeWave(void); double Volume(int pos, int wl); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnCreate(HWND hWnd); void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam); void OnHScroll(HWND hWnd, WPARAM wParam); void OnPaint(HWND hWnd); void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam); void Play(HWND hWnd); void OnWomOpen(void); void OnWomDone(HWND hWnd); // 音階 LPCTSTR scale[] = {L"C",L"C#",L"D",L"D#",L"E",L"F",L"F#",L"G",L"G#",L"A",L"A#",L"B"}; // 外部変数 SCROLLINFO siHorz; DWORD sampleLength; PBYTE waveformData = NULL; WAVEFORMATEX wfx; VWave vWave; DWORD sampleLength2; PBYTE waveformData2 = NULL; HWAVEOUT hwo; WAVEHDR wh; HCURSOR hCursor = NULL; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // プログラム引数 LPTSTR lpCmdLine = GetCommandLine(); int argc; LPTSTR *argv = CommandLineToArgvW(lpCmdLine, argc); if (2 = argc) { Load(argv[1]); } // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW | WS_HSCROLL, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ MSG msg; while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } return msg.wParam; } void Trace(LPCTSTR format, ...) { va_list arg_ptr; TCHAR buffer[256]; int size; va_start(arg_ptr, format); size = _vsntprintf_s(buffer, _countof(buffer), _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(_T("...\n")); } } BOOL Load(LPTSTR pszFileName) { if (ReadWaveFile(pszFileName) == FALSE) { return FALSE; } AnalyzeWave(); return TRUE; } BOOL ReadWaveFile(LPTSTR pszFileName) { MMRESULT mmr; sampleLength = 0; SAFE_FREE(waveformData) // Open HMMIO hmmio = mmioOpen(pszFileName, NULL, MMIO_READ); if (hmmio == NULL) { return FALSE; } // RIFFチャンク MMCKINFO ckParent; ckParent.fccType = mmioFOURCC( W , A , V , E ); mmr = mmioDescend(hmmio, ckParent, NULL, MMIO_FINDRIFF); if (mmr != MMSYSERR_NOERROR) { return FALSE; } // fmtチャンク MMCKINFO ckSub; ckSub.ckid = mmioFOURCC( f , m , t , ); mmr = mmioDescend(hmmio, ckSub, ckParent, MMIO_FINDCHUNK); if (mmr != MMSYSERR_NOERROR) { return FALSE; } LONG read = mmioRead(hmmio, (HPSTR) wfx, 16); if (read != 16) { return FALSE; } mmioAscend(hmmio, ckSub, 0); // dataチャンク ckSub.ckid = mmioFOURCC( d , a , t , a ); mmr = mmioDescend(hmmio, ckSub, ckParent, MMIO_FINDCHUNK); if (mmr != MMSYSERR_NOERROR) { return FALSE; } sampleLength = ckSub.cksize; waveformData = (PBYTE)malloc(ckSub.cksize); if (waveformData == NULL) { return FALSE; } read = mmioRead(hmmio, (HPSTR)waveformData, ckSub.cksize); if (read != ckSub.cksize) { return FALSE; } mmioAscend(hmmio, ckSub, 0); // RIFFチャンク mmioAscend(hmmio, ckParent, 0); // Close mmioClose(hmmio, 0); return TRUE; } BOOL AnalyzeWave(void) { for (int pos = 0; pos = (int)sampleLength - 200 * 2; ) {// 11,025Hz / 55Hz = 200.45 double r = -1; int waveLen; for (int wl = 12; wl = 200; wl++) { double sum = 0; for (int i = 0; i wl; i++) { sum += NORM(waveformData[pos + i]) * NORM(waveformData[pos + wl + i]); } sum /= wl; // 倍音抑制バイアス //sum *= 1 + 0.1 * log(200.0 / wl) / log(2.0); sum *= pow(1.1, log2((double)200 / wl)); if (r sum) { r = sum; waveLen = wl; } } double freq = (double)wfx.nSamplesPerSec / waveLen; double d = A4 + 12 * log2(freq / 440); Wave wave; wave.pos= pos; wave.waveLen= waveLen; wave.noteNum= int(d + 0.5); wave.vol= Volume(pos, waveLen); vWave.push_back(wave); pos += waveLen; } sampleLength2 = 0; for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { sampleLength2 += it- waveLen; } waveformData2 = (PBYTE)malloc(sampleLength2); int pos = 0; for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { for (int i = 0; i it- waveLen; i++) { double t = i / (double)it- waveLen; double y = t 0.5 ? 1 -1; //double y = sin(2 * M_PI * t); waveformData2[pos + i] = BYTE(128 + 127 * it- vol * y); } pos += it- waveLen; } return TRUE; } // 音量 double Volume(int pos, int wl) { double sum = 0; for (int i = 0; i wl; i++) { sum += abs(NORM(waveformData[pos + i])); } return sum / wl; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case MM_WOM_OPEN OnWomOpen(); return 0; case MM_WOM_DONE OnWomDone(hWnd); return 0; case WM_PAINT OnPaint(hWnd); return 0; case WM_HSCROLL OnHScroll(hWnd, wParam); return 0; case WM_SIZE OnSize(hWnd, wParam, lParam); return 0; case WM_CHAR OnChar(hWnd, wParam, lParam); return 0; case WM_CREATE OnCreate(hWnd); return 0; case WM_DESTROY SAFE_FREE(waveformData) SAFE_FREE(waveformData2) PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void OnCreate(HWND hWnd) { RECT rc; GetClientRect(hWnd, rc); siHorz.cbSize= sizeof siHorz; siHorz.fMask= SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL; siHorz.nMin= 0; siHorz.nMax= sampleLength - 1; siHorz.nPage= rc.right; siHorz.nPos= 0; SetScrollInfo(hWnd, SB_HORZ, siHorz, FALSE); } void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam) { if (wParam == SIZE_MINIMIZED) return; siHorz.nPage= LOWORD(lParam); int nPosMax= max(siHorz.nMax - (int)siHorz.nPage + 1, 0); siHorz.nPos= min(siHorz.nPos, nPosMax); SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); } void OnHScroll(HWND hWnd, WPARAM wParam) { int nPos = siHorz.nPos; switch (LOWORD(wParam)) { case SB_LINEUP nPos -= 10; break; case SB_LINEDOWN nPos += 10; break; case SB_PAGEUP nPos -= siHorz.nPage; break; case SB_PAGEDOWN nPos += siHorz.nPage; break; case SB_THUMBTRACK SCROLLINFO si; si.cbSize= sizeof si; si.fMask= SIF_TRACKPOS; if (GetScrollInfo(hWnd, SB_HORZ, si) != 0) { nPos = si.nTrackPos; } break; } int nPosMax = max(siHorz.nMax - (int)siHorz.nPage + 1, 0); nPos = min(nPos, nPosMax); nPos = max(nPos, 0); if (nPos == siHorz.nPos) return; ScrollWindowEx(hWnd, siHorz.nPos - nPos, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE); siHorz.nPos = nPos; SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); UpdateWindow(hWnd); } void OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); RECT rc; GetClientRect(hWnd, rc); //Trace(_T("OnPaint %d %d\n"), ps.rcPaint.left, ps.rcPaint.right); // waveform HPEN pen = CreatePen(PS_SOLID, 0, RGB(0,0,255)); HGDIOBJ penOld = SelectObject(hdc, pen); for (int x = ps.rcPaint.left; x ps.rcPaint.right; x++) { size_t i = siHorz.nPos + x; if (sampleLength = i) break; MoveToEx(hdc, x, rc.bottom / 2, NULL); LineTo(hdc, x, rc.bottom * (255 - waveformData[i]) / 256); } SelectObject(hdc, penOld); DeleteObject(pen); // waveform2 pen = CreatePen(PS_SOLID, 0, RGB(0,255,0)); penOld = SelectObject(hdc, pen); for (int x = ps.rcPaint.left; x ps.rcPaint.right; x++) { size_t i = siHorz.nPos + x; if (sampleLength2 = i) break; int y = rc.bottom * (255 - waveformData2[i]) / 256; MoveToEx(hdc, x, y, NULL); LineTo(hdc, x, y + 1); } SelectObject(hdc, penOld); DeleteObject(pen); // waveLen pen = CreatePen(PS_SOLID, 0, RGB(255,0,0)); penOld = SelectObject(hdc, pen); for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { int x = it- pos - siHorz.nPos; if (x + it- waveLen 0 || rc.right = x) continue; MoveToEx(hdc, x, 0, NULL); LineTo(hdc, x, rc.bottom); TCHAR buf[4+1]; _stprintf_s(buf, _T("%d"), it- waveLen); TextOut(hdc, x, 0, buf, _tcslen(buf)); _stprintf_s(buf, _T("%s%d"), scale[it- noteNum % 12], it- noteNum / 12 - 1); TextOut(hdc, x, 16, buf, _tcslen(buf)); } SelectObject(hdc, penOld); DeleteObject(pen); EndPaint(hWnd, ps); } void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam) { Trace(_T("OnChar %x %x\n"), wParam, lParam); switch (wParam) { case VK_ESCAPE DestroyWindow(hWnd); break; case p Play(hWnd); break; } } void Play(HWND hWnd) { if (hCursor) return; WAVEFORMATEX wf; wf.wFormatTag= WAVE_FORMAT_PCM; wf.wBitsPerSample= 8; wf.nChannels= 1; wf.nSamplesPerSec= wfx.nSamplesPerSec; wf.nBlockAlign= (wf.wBitsPerSample / 8) * wf.nChannels; wf.nAvgBytesPerSec= wf.nSamplesPerSec * wf.nBlockAlign; wf.cbSize= 0; MMRESULT mmr = waveOutOpen( hwo, WAVE_MAPPER, wf, (DWORD_PTR)hWnd, 0, CALLBACK_WINDOW); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutOpen\n")); return; } HCURSOR hWait = LoadCursor(NULL, IDC_WAIT); hCursor = SetCursor(hWait); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hWait); } void OnWomOpen(void) { wh.lpData= (LPSTR)waveformData2; wh.dwBufferLength= sampleLength2; wh.dwBytesRecorded= 0; wh.dwUser= 0; wh.dwFlags= 0; wh.dwLoops= 0; wh.lpNext= NULL; wh.reserved= 0; MMRESULT mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutPrepareHeader\n")); return; } wh.dwFlags|= WHDR_BEGINLOOP | WHDR_ENDLOOP; wh.dwLoops= 1; mmr = waveOutWrite(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutWrite\n")); } } void OnWomDone(HWND hWnd) { Trace(_T("OnWomDone\n")); waveOutReset(hwo); waveOutUnprepareHeader(hwo, wh, sizeof wh); waveOutClose(hwo); SetCursor(hCursor); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hCursor); hCursor = NULL; }
https://w.atwiki.jp/sampleisbest/pages/269.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 WaveGraph アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode Waveファイル(PCM 11.025kHz 8bit mono)を想定。 WaveGraph.cpp #pragma comment(lib, "winmm") #define _USE_MATH_DEFINES #include Windows.h #include tchar.h #include math.h #include vector using namespace std; typedef struct { int pos; int wl; int noteNum; double vol; } Wave; typedef vector Wave VWave; // note number #define A133 #define A469 #define A581 #define SAFE_FREE(p)if (p) { free(p); p = NULL; } #define APP_NAMETEXT("WaveGraph") // 関数プロトタイプ宣言 void Trace(LPCTSTR format, ...); BOOL Load(LPTSTR pszFileName); BOOL ReadWaveFile(LPTSTR pszFileName); BOOL AnalyzeWave(void); double LeastSquares(int pos, double freq, double waveLen); double Volume(int pos, int wl); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnCreate(HWND hWnd); void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam); void OnHScroll(HWND hWnd, WPARAM wParam); void OnPaint(HWND hWnd); LPCTSTR GetScale(int noteNum); void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam); void Play(HWND hWnd); void OnWomOpen(void); void OnWomDone(HWND hWnd); // 音階 LPCTSTR scale[] = {L"C",L"C#",L"D",L"D#",L"E",L"F",L"F#",L"G",L"G#",L"A",L"A#",L"B"}; // 外部変数 SCROLLINFO siHorz; DWORD sampleLength; PBYTE waveformData = NULL; WAVEFORMATEX wfx; VWave vWave; HWAVEOUT hwo; WAVEHDR wh; HCURSOR hCursor = NULL; DWORD sampleLength2; PBYTE waveformData2 = NULL; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // プログラム引数 LPTSTR lpCmdLine = GetCommandLine(); int argc; LPTSTR *argv = CommandLineToArgvW(lpCmdLine, argc); if (2 = argc) { Load(argv[1]); } // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW | WS_HSCROLL, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ MSG msg; while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } return msg.wParam; } void Trace(LPCTSTR format, ...) { va_list arg_ptr; TCHAR buffer[256]; int size; va_start(arg_ptr, format); size = _vsntprintf_s(buffer, _countof(buffer), _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(_T("...\n")); } } BOOL Load(LPTSTR pszFileName) { if (ReadWaveFile(pszFileName) == FALSE) { return FALSE; } AnalyzeWave(); return TRUE; } BOOL ReadWaveFile(LPTSTR pszFileName) { MMRESULT mmr; sampleLength = 0; SAFE_FREE(waveformData) // Open HMMIO hmmio = mmioOpen(pszFileName, NULL, MMIO_READ); if (hmmio == NULL) { return FALSE; } // RIFFチャンク MMCKINFO ckParent; ckParent.fccType = mmioFOURCC( W , A , V , E ); mmr = mmioDescend(hmmio, ckParent, NULL, MMIO_FINDRIFF); if (mmr != MMSYSERR_NOERROR) { return FALSE; } // fmtチャンク MMCKINFO ckSub; ckSub.ckid = mmioFOURCC( f , m , t , ); mmr = mmioDescend(hmmio, ckSub, ckParent, MMIO_FINDCHUNK); if (mmr != MMSYSERR_NOERROR) { return FALSE; } LONG read = mmioRead(hmmio, (HPSTR) wfx, 16); if (read != 16) { return FALSE; } mmioAscend(hmmio, ckSub, 0); // dataチャンク ckSub.ckid = mmioFOURCC( d , a , t , a ); mmr = mmioDescend(hmmio, ckSub, ckParent, MMIO_FINDCHUNK); if (mmr != MMSYSERR_NOERROR) { return FALSE; } sampleLength = ckSub.cksize; waveformData = (PBYTE)malloc(ckSub.cksize); if (waveformData == NULL) { return FALSE; } read = mmioRead(hmmio, (HPSTR)waveformData, ckSub.cksize); if (read != ckSub.cksize) { return FALSE; } mmioAscend(hmmio, ckSub, 0); // RIFFチャンク mmioAscend(hmmio, ckParent, 0); // Close mmioClose(hmmio, 0); return TRUE; } BOOL AnalyzeWave(void) { for (int pos = 0; pos = (int)sampleLength - 201; ) {// 11,025Hz / 55Hz = 200.45 int noteNum = -1; double jMin = 4.0; int wl; for (int n = A1; n = A5; n++) { double freq = 440.0 * pow(pow(2.0, n - A4), 1.0 / 12); double waveLen = wfx.nSamplesPerSec / freq; double j = LeastSquares(pos, freq, waveLen); if (j jMin) { noteNum = n; jMin = j; wl = (int)ceil(waveLen); } } Wave wave; wave.pos= pos; wave.wl= wl; wave.noteNum= noteNum; wave.vol= Volume(pos, wl); vWave.push_back(wave); pos += wl; } sampleLength2 = 0; for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { sampleLength2 += it- wl; } waveformData2 = (PBYTE)malloc(sampleLength2); int pos = 0; for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { for (int i = 0; i it- wl; i++) { double t = i / (double)it- wl; double y = t 0.5 ? 1 -1; waveformData2[pos + i] = BYTE(128 + 127 * it- vol * y); } pos += it- wl; } return TRUE; } // 最小二乗法 double LeastSquares(int pos, double freq, double waveLen) { double sum = 0; int wl = (int)ceil(waveLen); for (int i = 0; i wl; i++) { double t = i * freq / wfx.nSamplesPerSec; double y = sin(2 * M_PI * t); //double y = t 0.5 ? t * 2 (t - 1) * 2; double d = (waveformData[pos + i] - 128.0) / 128 - y; sum += d * d; } return sum / waveLen; } // 音量 double Volume(int pos, int wl) { double sum = 0; for (int i = 0; i wl; i++) { sum += abs((waveformData[pos + i] - 128.0) / 128); } return sum / wl; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case MM_WOM_OPEN OnWomOpen(); return 0; case MM_WOM_DONE OnWomDone(hWnd); return 0; case WM_PAINT OnPaint(hWnd); return 0; case WM_HSCROLL OnHScroll(hWnd, wParam); return 0; case WM_SIZE OnSize(hWnd, wParam, lParam); return 0; case WM_CHAR OnChar(hWnd, wParam, lParam); return 0; case WM_CREATE OnCreate(hWnd); return 0; case WM_DESTROY SAFE_FREE(waveformData) SAFE_FREE(waveformData2) PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void OnCreate(HWND hWnd) { RECT rc; GetClientRect(hWnd, rc); siHorz.cbSize= sizeof siHorz; siHorz.fMask= SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL; siHorz.nMin= 0; siHorz.nMax= sampleLength - 1; siHorz.nPage= rc.right; siHorz.nPos= 0; SetScrollInfo(hWnd, SB_HORZ, siHorz, FALSE); } void OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam) { if (wParam == SIZE_MINIMIZED) return; siHorz.nPage= LOWORD(lParam); int nPosMax= max(siHorz.nMax - (int)siHorz.nPage + 1, 0); siHorz.nPos= min(siHorz.nPos, nPosMax); SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); } void OnHScroll(HWND hWnd, WPARAM wParam) { int nPos = siHorz.nPos; switch (LOWORD(wParam)) { case SB_LINEUP nPos -= 10; break; case SB_LINEDOWN nPos += 10; break; case SB_PAGEUP nPos -= siHorz.nPage; break; case SB_PAGEDOWN nPos += siHorz.nPage; break; case SB_THUMBTRACK SCROLLINFO si; si.cbSize= sizeof si; si.fMask= SIF_TRACKPOS; if (GetScrollInfo(hWnd, SB_HORZ, si) != 0) { nPos = si.nTrackPos; } break; } int nPosMax = max(siHorz.nMax - (int)siHorz.nPage + 1, 0); nPos = min(nPos, nPosMax); nPos = max(nPos, 0); if (nPos == siHorz.nPos) return; ScrollWindowEx(hWnd, siHorz.nPos - nPos, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE); siHorz.nPos = nPos; SetScrollInfo(hWnd, SB_HORZ, siHorz, TRUE); UpdateWindow(hWnd); } void OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); RECT rc; GetClientRect(hWnd, rc); //Trace(_T("OnPaint %d %d\n"), ps.rcPaint.left, ps.rcPaint.right); // waveform HPEN pen = CreatePen(PS_SOLID, 0, RGB(0,0,255)); HGDIOBJ penOld = SelectObject(hdc, pen); for (int x = ps.rcPaint.left; x ps.rcPaint.right; x++) { size_t i = siHorz.nPos + x; if (sampleLength = i) break; MoveToEx(hdc, x, rc.bottom / 2, NULL); LineTo(hdc, x, rc.bottom * (255 - waveformData[i]) / 256); } SelectObject(hdc, penOld); DeleteObject(pen); // waveform2 pen = CreatePen(PS_SOLID, 0, RGB(0,255,0)); penOld = SelectObject(hdc, pen); for (int x = ps.rcPaint.left; x ps.rcPaint.right; x++) { size_t i = siHorz.nPos + x; if (sampleLength2 = i) break; int y = rc.bottom * (255 - waveformData2[i]) / 256; MoveToEx(hdc, x, y, NULL); LineTo(hdc, x, y + 1); } SelectObject(hdc, penOld); DeleteObject(pen); // waveLen pen = CreatePen(PS_SOLID, 0, RGB(255,0,0)); penOld = SelectObject(hdc, pen); for (VWave iterator it = vWave.begin(); it != vWave.end(); it++) { int x = it- pos - siHorz.nPos; if (x + it- wl 0 || rc.right = x) continue; MoveToEx(hdc, x, 0, NULL); LineTo(hdc, x, rc.bottom); LPCTSTR scale = GetScale(it- noteNum); TextOut(hdc, x, 0, scale, _tcslen(scale)); } SelectObject(hdc, penOld); DeleteObject(pen); EndPaint(hWnd, ps); } LPCTSTR GetScale(int noteNum) { static TCHAR buf[4+1]; _stprintf_s(buf, _T("%s%d"), scale[noteNum % 12], noteNum / 12 - 1); return buf; } void OnChar(HWND hWnd, WPARAM wParam, LPARAM lParam) { Trace(_T("OnChar %x %x\n"), wParam, lParam); switch (wParam) { case VK_ESCAPE DestroyWindow(hWnd); break; case p Play(hWnd); break; } } void Play(HWND hWnd) { if (hCursor) return; WAVEFORMATEX wf; wf.wFormatTag= WAVE_FORMAT_PCM; wf.wBitsPerSample= 8; wf.nChannels= 1; wf.nSamplesPerSec= wfx.nSamplesPerSec; wf.nBlockAlign= (wf.wBitsPerSample / 8) * wf.nChannels; wf.nAvgBytesPerSec= wf.nSamplesPerSec * wf.nBlockAlign; wf.cbSize= 0; MMRESULT mmr = waveOutOpen( hwo, WAVE_MAPPER, wf, (DWORD_PTR)hWnd, 0, CALLBACK_WINDOW); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutOpen\n")); return; } HCURSOR hWait = LoadCursor(NULL, IDC_WAIT); hCursor = SetCursor(hWait); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hWait); } void OnWomOpen(void) { wh.lpData= (LPSTR)waveformData2; wh.dwBufferLength= sampleLength2; wh.dwBytesRecorded= 0; wh.dwUser= 0; wh.dwFlags= 0; wh.dwLoops= 0; wh.lpNext= NULL; wh.reserved= 0; MMRESULT mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutPrepareHeader\n")); return; } wh.dwFlags|= WHDR_BEGINLOOP | WHDR_ENDLOOP; wh.dwLoops= 1; mmr = waveOutWrite(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { Trace(_T("waveOutWrite\n")); } } void OnWomDone(HWND hWnd) { Trace(_T("OnWomDone\n")); waveOutReset(hwo); waveOutUnprepareHeader(hwo, wh, sizeof wh); waveOutClose(hwo); SetCursor(hCursor); SetClassLong(hWnd, GCL_HCURSOR, (LONG)hCursor); hCursor = NULL; }
https://w.atwiki.jp/xbox360analysis/pages/64.html
SAVEFILESから取り出したPLAYDATA#.PPが対象 チェックサム ENDIAN(BIG) CSUM == FFFFFFFF CSUM = CRC32F( 10, xxxxx, EDB88320 ) WRITE( 8, 4 ) アドレス10からの4バイトの値を調べ、その値から-1hしたものが xxxxx になる 2-1以降使えない?? クレジット 93C-xxxxxxxx メディジェル所持数 BAB-xx PRIMARY WEPON B8E-xxxx 武器コード B90-yyyy 装填数 B92-zzzz 段数 SECONDARY WEPON B96-xxxx 武器コード B98-yyyy 装填数 B9A-zzzz 段数 グレネード B86-xxxx B88-yyyy B8A-zzzz
https://w.atwiki.jp/yani/pages/16.html
まずは何も考えず一番短いプログラムを書いて、慣れることから始めます。 #include stdio.h int main(void) { return 0; } 上記のプログラムを書いたら「Ctrl + F5」を押して実行しましょう。 ちゃんと書けていれば、なんかそれっぽい黒い画面が出てきます。
https://w.atwiki.jp/mtgwiki/pages/144.html
《B.F.M.(Big Furry Monster)》 #whisper 2枚一組(左、右)のカード、黒15マナというマナ・コスト、99/99というパワー・タフネス、非常に長いクリーチャー・タイプ名。 どれをとっても普通ではないことが分かる巨大クリーチャー。 イラストで角に刺さっているのはこれが出るまで最大のパワーを持っていたクリーチャーであるPolar Krakenとファイレクシアン・ドレッドノート/Phyrexian Dreadnought。フレイバー・テキストはPolar Krakenを真似ている。 なお、最大マナ・コストの記録だけは他のカードによって更新された。(ドラコ/Draco、Gleemax) 最強クリーチャーや最大クリーチャーの話題になると名前が出てくる事も。 生ける屍/Living Deathや歯と爪/Tooth and Nailなどの複数のクリーチャー・カードを場に出せる効果で場に出すことができる。 フレイバー・テキスト (日本語訳と注は あんかば カードリストより引用) It was big. Really, really big. No, bigger than that. Even bigger. Keep going. More. No, more. Look, we re talking krakens and dreadnoughts for jewelry. It was big! -Arna Kennerud, skyknight 大きい。実に、本当に大きい。あれより大きなものはまず存在しないわ。もっともっと大きいの。それ以上ないほど。見て、話してたクラーケンやドレッドノートを飾りにしてるわ。とにかく大きいの! −飛空騎士、アーナ・ケネルッド Polar Krakenのフレーバーのパロディ 参考 カード個別評価:Unglued系 壁紙
https://w.atwiki.jp/hackerbobchan/pages/17.html
原文はこちら http //support.f5.com/kb/en-us/solutions/public/13000/400/sol13415.html SOL13415 [[BIG-IP]]にて49日後に誤ったCPU使用統計を報告する可能性 対象バージョン BIG-IP LTM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP ASM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP GTM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP PSM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP Link Controller11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP WebAccelerator11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP APM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP WOM11.1.0, 11.0.0, 10.2.3, 10.2.2 BIG-IP Edge Gateway11.1.0, 11.0.0, 10.2.3, 10.2.2 説明 システムは、49日後に誤ったCPU使用統計報告するかもしれません。 以下の条件が満たされるとき、この問題は起こります: ・システムのuptimeが49日以上の場合 影響 誤ったCPU使用統計が報告されるかもしれません。 事象 この問題の結果、バージョン10.2.2から11.1.0で以下の事象に直面するかもしれません: ・システムがおよそ49.7日を境に、突然CPUのPerformance Graphsが減少するかもしれません。 ・システムはtopコマンドの出力と同じCPUデータを報告するSNMPツールで、CPU使用量を誤って表示します。 上記の事象に加えて、バージョン11.1.0で以下の事象に直面するかもしれません: ・/var/log/ltmファイルに以下の例に類似したメッセージが出力されるかもしれません。 ○ 01010040 4 Clock has unexpectedly adjusted by 24400 ms ○ warning kernel Clocksource tsc unstable (delta = -396203001 ns) ○ 01160024 4 warning no receive on 3/2.8 for 45s (timeout=90s) ○ 012a0003 3 CPLD write byte failed I2C File I/O Error [No such device or address] at I2cDev.cpp 119 File MGAI2cCpld.cpp Line 67 ○ warning chmand[6178] 012a0004 4 VCC_ICH = 1239 out of range 945/1155 ・システムの時間は速くなるかもしれません。例えば、1分でシステムクロックは17分進むかもしれません。 ・/var/log/kern.logファイルに以下の例に類似したメッセージが出力されるかもしれません。 ○ err kernel i801_smbus 0000 00 1f.3 SMBus is busy, can't use it! ・下記の例で示されるように、bigstart statusコマンドの出力結果でtmroutedがrestartを繰り返していると表示するかもしれません。 ○ tmrouted run (pid 25546) 26 seconds, 11776 restarts ・/var/log/ltmファイルに電源故障のメッセージも出力するかもしれません。 ○ emerg system_check[30678] 010d0006 0 Chassis power supply 1 has experienced an issue. Status is as follows FAN=good; STATUS=bad. 状況 F5製品開発はID 374428をこの問題に割り当てました。この問題が上記対象バージョンの中に存在することを確認しました。 この問題を解決するリリースまたはホットフィックスに関しては、以下の表を参照してください。 Fixのタイプ Fixしたバージョン 関連記事 リリース 10.2.4 SOL2200 Most recent versions of F5 software ホットフィックス 11.1.0 HF2 SOL9502 BIG-IP hotfix matrix 暫定対策 この問題の暫定対策は、システムのuptimeをリセットすることです。 以下の手順を実行します。 暫定対策の影響 uptimeをリセットするにはシステムの再起動が必要となりますので、結果としてサービスの中断が起こります。 1. BIG-IPのコマンドラインにログインします。 2. 次のコマンドを実行して、システムを再起動します。 reboot; exit
https://w.atwiki.jp/sampleisbest/pages/78.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 aaa アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト レジストリへの登録 regsvr32 C \aaa.dll レジストリの登録を解除 regsvr32 /u C \aaa.dll 参考 Infotip ハンドラ aaa.def ; リンカー/入力/モジュール定義ファイル LIBRARY"aaa" EXPORTS DllCanUnloadNow PRIVATE DllGetClassObject PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE aaa.h class CQueryInfo public IQueryInfo, public IPersistFile { public STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IQueryInfo STDMETHODIMP GetInfoTip(DWORD dwFlags, LPWSTR *ppwszTip); STDMETHODIMP GetInfoFlags(DWORD *pdwFlags); // IPersistFile STDMETHODIMP GetClassID(CLSID *pClassID); STDMETHODIMP IsDirty(); STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode); STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember); STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName); STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName); CQueryInfo(); ~CQueryInfo(); private LONGm_cRef; WCHARm_szInfotip[256]; }; class CClassFactory public IClassFactory { public STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IClassFactory STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); STDMETHODIMP LockServer(BOOL fLock); }; aaa.c #pragma comment(lib, "shlwapi.lib") #include ShlObj.h #include Shlwapi.h #include Windows.h #include "aaa.h" // 関数プロトタイプ宣言 void LockModule(BOOL bLock); BOOL CreateRegistryKey(HKEY hKeyRoot, LPTSTR lpszKey, LPTSTR lpszValue, LPTSTR lpszData); // グローバル変数 const CLSIDCLSID_QueryInfoSample = {0x6986c66a, 0x401f, 0x4535, {0x89, 0x18, 0x48, 0x07, 0x29, 0x39, 0xd2, 0xa4}}; const TCHARg_szClsid[] = TEXT("{6986C66A-401F-4535-8918-48072939D2A4}"); const TCHARg_szExt[] = TEXT(".aaa"); LONGg_lLocks = 0; HINSTANCEg_hinstDll = NULL; //============================================================================== // CQueryInfo CQueryInfo CQueryInfo() { m_cRef = 1; LockModule(TRUE); } CQueryInfo ~CQueryInfo() { LockModule(FALSE); } STDMETHODIMP CQueryInfo QueryInterface(REFIID riid, void **ppvObject) { *ppvObject = NULL; if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IQueryInfo)) { *ppvObject = static_cast IQueryInfo * (this); } else if (IsEqualIID(riid, IID_IPersist) || IsEqualIID(riid, IID_IPersistFile)) { *ppvObject = static_cast IPersistFile * (this); } else { return E_NOINTERFACE; } AddRef(); return S_OK; } STDMETHODIMP_(ULONG) CQueryInfo AddRef() { return InterlockedIncrement( m_cRef); } STDMETHODIMP_(ULONG) CQueryInfo Release() { if (InterlockedDecrement( m_cRef) == 0) { delete this; return 0; } return m_cRef; } //------------------------------------------------------------------------------ // IQueryInfo STDMETHODIMP CQueryInfo GetInfoTip(DWORD dwFlags, LPWSTR *ppwszTip) { if (!ppwszTip) { return E_POINTER; } *ppwszTip = (LPWSTR)CoTaskMemAlloc((lstrlenW(m_szInfotip) + 1) * sizeof (WCHAR)); lstrcpyW(*ppwszTip, m_szInfotip); return S_OK; } STDMETHODIMP CQueryInfo GetInfoFlags(DWORD *pdwFlags) { return E_NOTIMPL; } //------------------------------------------------------------------------------ // IPersistFile STDMETHODIMP CQueryInfo GetClassID(CLSID *pClassID) { *pClassID = CLSID_QueryInfoSample; return S_OK; } STDMETHODIMP CQueryInfo IsDirty() { return E_NOTIMPL; } STDMETHODIMP CQueryInfo Load(LPCOLESTR pszFileName, DWORD dwMode) { lstrcpyW(m_szInfotip, L"My Infotip"); return S_OK; } STDMETHODIMP CQueryInfo Save(LPCOLESTR pszFileName, BOOL fRemember) { return E_NOTIMPL; } STDMETHODIMP CQueryInfo SaveCompleted(LPCOLESTR pszFileName) { return E_NOTIMPL; } STDMETHODIMP CQueryInfo GetCurFile(LPOLESTR *ppszFileName) { return E_NOTIMPL; } //============================================================================== // CClassFactory STDMETHODIMP CClassFactory QueryInterface(REFIID riid, void **ppvObject) { *ppvObject = NULL; if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) { *ppvObject = static_cast IClassFactory * (this); } else { return E_NOINTERFACE; } AddRef(); return S_OK; } STDMETHODIMP_(ULONG) CClassFactory AddRef() { LockModule(TRUE); return 2; } STDMETHODIMP_(ULONG) CClassFactory Release() { LockModule(FALSE); return 1; } //------------------------------------------------------------------------------ // IClassFactory STDMETHODIMP CClassFactory CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject) { CQueryInfo*p; HRESULThr; *ppvObject = NULL; if (pUnkOuter != NULL) { return CLASS_E_NOAGGREGATION; } p = new CQueryInfo(); if (p == NULL) { return E_OUTOFMEMORY; } hr = p- QueryInterface(riid, ppvObject); p- Release(); return hr; } STDMETHODIMP CClassFactory LockServer(BOOL fLock) { LockModule(fLock); return S_OK; } //============================================================================== // DLL Export STDAPI DllCanUnloadNow(void) { return (g_lLocks == 0) ? S_OK S_FALSE; } STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { static CClassFactory serverFactory; HRESULThr; *ppv = NULL; if (IsEqualCLSID(rclsid, CLSID_QueryInfoSample)) { hr = serverFactory.QueryInterface(riid, ppv); } else { hr = CLASS_E_CLASSNOTAVAILABLE; } return hr; } STDAPI DllRegisterServer(void) { TCHARszModulePath[MAX_PATH]; TCHARszKey[256]; wsprintf(szKey, TEXT("CLSID\\%s"), g_szClsid); if (!CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, TEXT("ShellExtension Sample"))) { return E_FAIL; } GetModuleFileName(g_hinstDll, szModulePath, _countof(szModulePath)); wsprintf(szKey, TEXT("CLSID\\%s\\InprocServer32"), g_szClsid); if (!CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, szModulePath)) { return E_FAIL; } wsprintf(szKey, TEXT("CLSID\\%s\\InprocServer32"), g_szClsid); if (!CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, TEXT("ThreadingModel"), TEXT("Apartment"))) { return E_FAIL; } wsprintf(szKey, TEXT("%s\\shellex\\{00021500-0000-0000-C000-000000000046}"), g_szExt); if (!CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, (LPTSTR)g_szClsid)) { return E_FAIL; } return S_OK; } STDAPI DllUnregisterServer(void) { TCHARszKey[256]; wsprintf(szKey, TEXT("CLSID\\%s"), g_szClsid); SHDeleteKey(HKEY_CLASSES_ROOT, szKey); SHDeleteKey(HKEY_CLASSES_ROOT, g_szExt); return S_OK; } BOOL APIENTRY DllMain( HINSTANCEhinstDLL, DWORDfdwReason, LPVOIDlpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH g_hinstDll = hinstDLL; DisableThreadLibraryCalls(hinstDLL); break; } return TRUE; } //============================================================================== // Function void LockModule(BOOL bLock) { if (bLock) { InterlockedIncrement( g_lLocks); } else { InterlockedDecrement( g_lLocks); } } BOOL CreateRegistryKey(HKEY hKeyRoot, LPTSTR lpszKey, LPTSTR lpszValue, LPTSTR lpszData) { HKEYhKey; LONGlResult; DWORDdwSize; lResult = RegCreateKeyEx(hKeyRoot, lpszKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, hKey, NULL); if (lResult != ERROR_SUCCESS) { return FALSE; } if (lpszData != NULL) { dwSize = (lstrlen(lpszData) + 1) * sizeof (TCHAR); } else { dwSize = 0; } RegSetValueEx(hKey, lpszValue, 0, REG_SZ, (LPBYTE)lpszData, dwSize); RegCloseKey(hKey); return TRUE; }