對於我在Borland C++ Builder 4.0中創建的程序,我希望能夠創建一個可以設置批處理腳本的版本。批處理srcipt會調用我的.exe(無需啓動主窗體),這會導致我的程序的主進程使用批處理文件中指定的輸入執行。一旦產生輸出,程序就會關閉。創建我的.exe的批處理版本,它採用BCB 4.0中的命令行參數(ParamCount(),ParamStr()和FindCmdLineSwitch)
批處理腳本的前三個參數將指定三個主輸入文件的位置(用其他方式加載按鈕的文件),設置一個開關以定義是針對單個情況還是多個(類似-m或-s)。如果前者爲真,程序將讀取第四種輸入文件的位置。在後者的情況下,它將在另一個csv中讀取,該csv給出該第四類型輸入的多個輸入文件的位置。該批處理文件還將定義輸出位置和輸出文件名。
根據我迄今爲止在這裏和不同論壇上閱讀的內容,我在想最簡單的方法是使用ParamCount()和ParamStr()以及FindCmdLineSwitch。這仍然有點朦朧,我究竟如何使用這些(我爲我的無知道歉,但這不僅是我的第一個BCB項目,也是我第一次使用C++進行編碼和創建Windows GUI的真實體驗)...根據我的理解,我可以使用這些與http://docwiki.embarcadero.com/CodeExamples/Seattle/en/ParamCount_(C%2B%2B)中描述的相似的方式。
有幾件事情我不知道:
- 凡在我的節目,我應該把ParamCount()和ParamStr這(),它檢查是否我已經推出在命令行中的.exe零件/與批處理文件?這裏建議將它放在主要的.cpp文件中,該文件初始化表格http://www.borlandtalk.com/running-command-line-parameters-vt17942.html。我正在考慮這樣做,並從我的主要UnitSomething.cpp中調用正確的函數。或者我應該把這些功能放在別的地方?
批處理文件將如何顯示?參數如何分離?只是空間?比方說,在我的腳本中包含新部分之後,我可以創建一個看起來像這樣的批處理腳本嗎?
「C:/程序文件/ MyProgram/myprogram.exe」, 「第一輸入的位置」, 「第二輸入的位置」 等-m
(I已經在批處理中使用ANSYS CFX,一個CFD工具前模式,並且例如具有切換以定義哪個文件是定義文件[-def]和初始化文件[-ini])。
與前面相關,交換機如何進入圖片?他們什麼時候應該使用?例如,當我想爲第一個輸入定義一個位置時,是否應該在它之前有一個開關,像-inp1?我在這裏看到一個例子Selection of Forms just after program execution,但我不確定這與一個簡單的ParamStr有什麼不同?更具體地說,我如何以及何時使用FindCmdLineSwitch?
最後,使用上述三個函數中的任何一個,是否必須更改WINAPI WinMain()調用參數中的任何內容?
謝謝。
GUI應用程序和控制檯應用程序需要將不同的後端代碼鏈接到EXE中。如果您沒有控制檯嚮導,則無法創建真正的控制檯應用程序。但是,您並不需要爲應用程序創建單獨的控制檯版本。您可以簡單地編輯現有的GUI應用程序的'WinMain()'函數,以便在啓動時查找命令行參數,可以通過VCL的'ParamCount()'和'ParamStr()'函數或Win32 API'GetCommandLine() 'CommandLineToArgvW()'函數。如果參數存在,根據需要處理它們,然後退出'WinMain()'而不顯示GUI。 –
非常感謝@RemyLebeau。我花了一天的時間閱讀文檔和(主要是你)在不同論壇上回復類似的問題。基於上述,我對如何實現我需要的東西有一個模糊的想法,但是有些東西有些不清楚。我編輯了我的原始問題,我是否可以請你告訴我,如果我在正確的軌道上,並且如果你有時間,可能回答我添加的一個或兩個問題? – laika
_Boost.Program \ _Options_?方便地管理「主要」論點是一個解決的問題。 –