WIN32,VC程序開發(fā),捕獲軟件所有異常的C++代碼源碼(程序中捕獲異常的方法)
本篇文章屬于《518超市播音軟件開發(fā)日志》系列文章的一部分。
我在開發(fā)《518超市播音軟件》的時(shí)候,有一個(gè)異常捕獲的要求,就是說(shuō)如果用戶用的是盜版破解,那可能會(huì)引起軟件異常退出,程序最后要捕獲這個(gè)異常,并提示用戶不要用盜版。開發(fā)工具是 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"軟件異常 (0xx)nn常見原因:n軟件為盜版,建議到官網(wǎng)下載軟件重新安裝nn如仍有問(wèn)題:n找技術(shù)支持  -  官網(wǎng)>聯(lián)系我們>QQ/電話等nn點(diǎn)確定打開官網(wǎng):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的異常處理設(shè)置
在工程屬性里,找到C  里面的代碼生成。
1. 啟用C  異常: 是,但有SEH異常 /EHa
2. 安全檢查: 禁用安全檢查
3. 啟用浮點(diǎn)異常: 否
4. 啟用函數(shù)級(jí)鏈接: 否 /Gy-
