在傳統的 C 語言 DOS 程式設計中,開發者習慣透過 main(int argc, char *argv[]) 來接收命令列參數,其中 argc 為參數個數,argv[0] 為程式完整路徑,其餘為實際參數。但轉入 Windows 視窗程式開發後,入口點變為 WinMain,其參數 lpszCmdLine 僅為一長串完整命令列字串,解析極為不便。若您使用 C++ Builder,則可大鬆一口氣——它內建三個全域工具,讓命令列參數處理變得異常簡單。
C++ Builder 在 System.hpp 中宣告了以下全域變數與函式:
extern PACKAGE char *CmdLine;
extern PACKAGE AnsiString __fastcall ParamStr(int Index);
extern PACKAGE int __fastcall ParamCount(void);
WinMain 的 lpszCmdLine,為完整命令列字串(含程式路徑)。argc - 1。ParamStr(0) 為程式完整路徑,實際參數從 ParamStr(1) 到 ParamStr(ParamCount())。以下示範如何在表單建立時自動列出所有參數:
Label(顯示完整命令列)與一個 ListBox(逐行列出參數)。OnCreate 事件撰寫:void __fastcall TForm1::FormCreate(TObject *Sender)
{
Label1->Caption = CmdLine; // 顯示完整命令列
for (int i = 0; i <= ParamCount(); ++i) // 0 為程式路徑,1..n 為參數
ListBox1->Items->Add(ParamStr(i));
}
arg1 "second arg" 3),執行程式即可看到結果。Trim() 或 ParamStr(i).Trim() 可移除前後空白。std::vector<AnsiString> 供標準 C++ 邏輯使用。善用這三個工具,即可在 C++ Builder 中像 DOS 時代一樣輕鬆處理命令列參數,大幅簡化視窗程式的啟動邏輯。