(好康福利)專業級程式碼,由你來填寫
詹宗運製作 詹宗運的筆記
寫程式碼是一種所謂一棒接著一棒的接力賽事業,
第一棒通常由業界的超級人士來擔任,
有時候這些人士因為緋聞而退休,
其他地區時候因為其他業界原因而退休。
AI可以完成這些退休事件發生時所造成的
人力空缺。
為了記念這個歷史性的空白時刻,
我也來寫一篇宗運版的空白程式碼,
投資給未來的我,與未來的新手來填寫。
以下的程式碼只有一個主要位置可以填寫,
填寫好了以後有各種除錯區塊可以呼叫,
秀什麼都可以,就像填寫一份DirectX專業表單一樣輕鬆,
技術上不難。
使用十分方便,是我愛用的基本架構,
今天趁這個業界空白的時刻隆重推出,
讓業界在空白的時刻有空白的程式碼可以工作。
未來一定可以拋磚引玉,
使業界產生下一代的工業級程式碼寫作高手。
使用視同購買,費用0元,推廣期間歡迎
大家來信分享使用的各種心得喔。
使用方式:
1,打開VC++2005,建立一個有正常的stdafx.h的win32主控台專案,這裡假設專案名稱為project1.vcproj,有stdafx.h與project1.cpp。
2,你要使用時可以刪除你的project1.cpp舊有內容並且把下面提供的project1.cpp拷貝貼上,覆蓋你的project1.cpp。拷貝將會成功,並且在編譯成功以後,變成一個可行的空白程式碼的範例專案。
3,以下是宗運版的Visual C++ 2005空白程式碼project1.cpp:(拷貝貼上即可)
// project1.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
// project1.cpp
// Visual C++ 2005 compatible
// RTC Run-Time Error Handler
#include "stdafx.h"
#include <windows.h>
#include <rtcapi.h>
#include <iostream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
using namespace std;
// 防止錯誤處理函式再次進入時發生遞迴鎖死
#pragma runtime_checks("", off)
static volatile LONG g_IsRunning = 0;
// RTC 執行階段錯誤處理函式
int __cdecl MyErrorHandler(
int errType,
const char* file,
int line,
const char* module,
const char* format,
...)
{
char s[1024];
const char* ErrorDesc;
_RTC_ErrorNumber ErrorNumber;
va_list ArgList;
// 不等待鎖定,避免遞迴進入時無限等待
if (InterlockedCompareExchange(
&g_IsRunning, 1, 0) != 0)
{
OutputDebugStringA(
"MyErrorHandler: recursive entry detected.發現遞迴進入\n");
return 0;
}
// 取得 RTC 錯誤編號
va_start(ArgList, format);
ErrorNumber = va_arg(ArgList, _RTC_ErrorNumber);
va_end(ArgList);
// 取得錯誤描述
ErrorDesc = _RTC_GetErrDesc(ErrorNumber);
if (ErrorDesc == NULL)
{
ErrorDesc = "Unknown run-time error未知執行期錯誤.";
}
// 組合錯誤訊息
sprintf_s(
s,
sizeof(s),
"%s occurred.\n"
"Error type: %d\n"
"Line: %d\n"
"File: %s\n"
"Module: %s\n\n"
"Click OK to return to the debugger.按下OK鍵返回.",
ErrorDesc,
errType,
line,
file ? file : "Unknown",
module ? module : "Unknown");
// 顯示錯誤訊息
MessageBoxA(
NULL,
s,
"Run-Time Error執行期錯誤",
MB_OK | MB_ICONERROR);
// 釋放防遞迴旗標
InterlockedExchange(&g_IsRunning, 0);
// 回傳 1,要求 RTC 執行階段進行偵錯中斷
return 1;
}
#pragma runtime_checks("", restore)
// 一般 C++ 例外處理函式
// 與 RTC 回呼函式使用不同的參數簽章
void MyErrorHandler(const char* message)
{
cout << endl;
cout << "========== MyErrorHandler ==========" << endl;
cout << "Error Message錯誤訊息: "
<< (message ? message : "Unknown exception未知錯誤")
<< endl;
cout << "====================================" << endl;
}
// 主程式
int _tmain(int argc, _TCHAR* argv[])
{
_RTC_error_fn OldHandler = NULL;
try
{
// 安裝自訂 RTC 錯誤處理函式
OldHandler = _RTC_SetErrorFunc(&MyErrorHandler);
//==== 主要程式碼區塊 ====
//==== 在這裡填寫 ====
//==== 你的程式碼 ====
//==== 例如: ====
cout << "Hello World!哈囉!" << endl;
cout << "Program started.程式碼內容在此執行." << endl;
// 測試一般 C++ 例外
// 取消下一行註解即可測試 try-catch
// throw runtime_error("Test exception occurred.測試例外發生!");
cout << "This line will execute if no exception occurs.如果沒有例外將會看到這一行."
<< endl;
//==== 填寫程式碼 ====
//==== 到這裡完成 ====
//==== 下載視同購買! ====
//==== 費用0元! ====
//==== 歡迎來信分享! ====
}
catch (const exception& ex)
{
MyErrorHandler(ex.what());
}
catch (...)
{
MyErrorHandler("Unknown exception occurred.未知意外發生.");
}
cout << endl;
cout << "Program continues after exception handling.在例外處理後~ 程式繼續." << endl;
cout << "在這裡進行結尾的程式碼執行." << endl;
cout << "Press Enter to exit.按下Enter鍵離開." << endl;
// 還原原本的 RTC 錯誤處理函式
_RTC_SetErrorFunc(OldHandler);
cin.get();
return 0;
}