本篇文章屬於《518超市播音軟體開發日誌》系列文章的一部分。我在開發《518超市播音軟體》的時候,有一個異常捕獲的要求,就是說如果使用者用的是盜版破解,那可能會引起軟體異常退出,程式最後要捕獲這個異常,並提示使用者不要用盜版。開發工具是 VC2015。
程式程式碼 __try, __except
__try { if (!g_app.init_app(bTray, bLockWorkStation)) { OleUninitialize(); return 0; } MSG msg; HWND hLvPgmsA = GetDlgItem(g_app.m_hPanelaA, IDC_panel_lvPgms); HWND hLvPgmsB = GetDlgItem(g_app.m_hPanelB, IDC_panel_lvPgms); HACCEL hAccelA = LoadAccelerators(g_app.m_hInst, (LPCTSTR)IDR_accelA); HACCEL hAccelB = LoadAccelerators(g_app.m_hInst, (LPCTSTR)IDR_accelB); while (GetMessage(&msg, NULL, 0, 0)) { int idx = SendDlgItemMessage(g_app.m_hLeft, IDC_left_list, LB_GETCURSEL, 0, 0); if (idx == 1 && g_app.m_iTabOfPanelA == 0 && GetFocus() == hLvPgmsA) { if (TranslateAccelerator(g_app.m_hPanelaA, hAccelA, &msg)) continue; } else if (idx == 2 && GetFocus() == hLvPgmsB) { if (TranslateAccelerator(g_app.m_hPanelB, hAccelB, &msg)) continue; } TranslateMessage(&msg); DispatchMessage(&msg); } } __except ( 1 ) { disable_allPgms(); WCHAR msg[MAX_MSG] = { 0 }; DWORD ec = GetExceptionCode(); swprintf(msg, L"軟體異常 (0x%08x)\n\n常見原因:\n軟體為盜版,建議到官網下載軟體重新安裝\n\n如仍有問題:\n找技術支援 - 官網>聯絡我們>QQ/電話等\n\n點確定開啟官網:\nwww.518boyin.com", ec); MessageBox(g_app.m_hMain, msg, g_title, MB_OK | MB_ICONERROR | MB_TOPMOST | MB_SETFOREGROUND); g_app.MyShellExecute(NULL, L"open", URL_HOME, NULL, NULL, SW_SHOWNORMAL); }
VC2015的異常處理設定
__try { if (!g_app.init_app(bTray, bLockWorkStation)) { OleUninitialize(); return 0; } MSG msg; HWND hLvPgmsA = GetDlgItem(g_app.m_hPanelaA, IDC_panel_lvPgms); HWND hLvPgmsB = GetDlgItem(g_app.m_hPanelB, IDC_panel_lvPgms); HACCEL hAccelA = LoadAccelerators(g_app.m_hInst, (LPCTSTR)IDR_accelA); HACCEL hAccelB = LoadAccelerators(g_app.m_hInst, (LPCTSTR)IDR_accelB); while (GetMessage(&msg, NULL, 0, 0)) { int idx = SendDlgItemMessage(g_app.m_hLeft, IDC_left_list, LB_GETCURSEL, 0, 0); if (idx == 1 && g_app.m_iTabOfPanelA == 0 && GetFocus() == hLvPgmsA) { if (TranslateAccelerator(g_app.m_hPanelaA, hAccelA, &msg)) continue; } else if (idx == 2 && GetFocus() == hLvPgmsB) { if (TranslateAccelerator(g_app.m_hPanelB, hAccelB, &msg)) continue; } TranslateMessage(&msg); DispatchMessage(&msg); } } __except ( 1 ) { disable_allPgms(); WCHAR msg[MAX_MSG] = { 0 }; DWORD ec = GetExceptionCode(); swprintf(msg, L"軟體異常 (0x%08x)\n\n常見原因:\n軟體為盜版,建議到官網下載軟體重新安裝\n\n如仍有問題:\n找技術支援 - 官網>聯絡我們>QQ/電話等\n\n點確定開啟官網:\nwww.518boyin.com", ec); MessageBox(g_app.m_hMain, msg, g_title, MB_OK | MB_ICONERROR | MB_TOPMOST | MB_SETFOREGROUND); g_app.MyShellExecute(NULL, L"open", URL_HOME, NULL, NULL, SW_SHOWNORMAL); }
在工程屬性裡,找到C++裡面的程式碼生成。1. 啟用C++異常: 是,但有SEH異常 /EHa
2. 安全檢查: 禁用安全檢查
3. 啟用浮點異常: 否
4. 啟用函式級連結: 否 /Gy-
最新評論