線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2796
推到 Plurk!
推到 Facebook!

在程式裡面呼叫另一程式執行,並且使用 argc 、argv 傳遞參數

尚未結案
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 17:33:01 IP:202.39.xxx.xxx 未訂閱
各位高手!    小弟想要在程式進行中, 呼叫其他的執行檔起來執行, 並且要使用 argc、argv 的參數傳遞, 來初始被呼叫的程式, 該怎麼做?    另外在被呼叫的程式中, 在 BCB 下應該怎麼做, 才能讀到外來 argc、argv 的參數?    煩請各位高手指導! 不勝感激! -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 17:47:51 IP:61.66.xxx.xxx 未訂閱
casper97你好    你可以在 WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmdline, int) 找到命令列cmdline(這是我取的變數) 可以用ShowMessage(AnsiString(cmdline));來檢驗是否錯誤 而用 ParamCount()可以知道有幾個參數輸入    BCB的HELP     
 
int WINAPI WinMain(        HINSTANCE hInstance,        // handle to current instance
    HINSTANCE hPrevInstance,        // handle to previous instance
    LPSTR lpCmdLine,        // pointer to command line
    int nCmdShow         // show state of window
   );
ParamCount Returns the number of parameters passed on the command line.
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-04 19:13:27 IP:202.39.xxx.xxx 未訂閱
感謝 blk5743 的回應:    我已有試過了, 的確可以找到相關的字串, test.exe abcd 但是卻要自行以迴圈找出abcd的字串。    我的程式碼如下    #include  #pragma hdrstop USERES("Call.res"); USEFORM("Unit1.cpp", Form1); //-------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE,LPSTR CmdLine, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //-------------------------------------------------------------------- //-------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //-------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AnsiString Temp; int i,j,index,len; Temp=AnsiString(CmdLine); len=Temp.Length(); j=ParamCount(); ShowMessage(Temp); Form1->Label1->Caption=Temp; Form1->Label3->Caption=len; char *Str; Str=new BYTE[len]; memcpy(Str,Temp.c_str(),len); i=len; while(i>0) { if(Str[i]=='"') { index=i; i=0; } else i--; } Form1->Label2->Caption=index; len-=index; char *Str2; Str2=new BYTE[len]; memset(Str2,0,len); memcpy(Str2,&Str[index 2],len); Form1->Label2->Caption=Str2; } //-------------------------------------------------------------------- #define Unit1H //-------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include "Call.cpp" //-------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TLabel *Label2; TLabel *Label3; private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //-------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------#endif 另外一個問題, 就是我在程式中如何呼叫其他程式來執行呢? 謝謝! -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
smartboss
初階會員


發表:19
回覆:93
積分:42
註冊:2004-12-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-05 22:51:29 IP:210.192.xxx.xxx 未訂閱
引言: 感謝 blk5743 的回應: 我已有試過了, 的確可以找到相關的字串, test.exe abcd 但是卻要自行以迴圈找出abcd的字串。 我的程式碼如下 #include #pragma hdrstop USERES("Call.res"); USEFORM("Unit1.cpp", Form1); //-------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE,LPSTR CmdLine, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //-------------------------------------------------------------------- //-------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //-------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AnsiString Temp; int i,j,index,len; Temp=AnsiString(CmdLine); len=Temp.Length(); j=ParamCount(); ShowMessage(Temp); Form1->Label1->Caption=Temp; Form1->Label3->Caption=len; char *Str; Str=new BYTE[len]; memcpy(Str,Temp.c_str(),len); i=len; while(i>0) { if(Str[i]=='"') { index=i; i=0; } else i--; } Form1->Label2->Caption=index; len-=index; char *Str2; Str2=new BYTE[len]; memset(Str2,0,len); memcpy(Str2,&Str[index 2],len); Form1->Label2->Caption=Str2; } //-------------------------------------------------------------------- #define Unit1H //-------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include "Call.cpp" //-------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TLabel *Label2; TLabel *Label3; private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //-------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------#endif 另外一個問題, 就是我在程式中如何呼叫其他程式來執行呢? 謝謝! -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
大哥您這樣太累了,請您把以下這行改成下下一行的樣子,就可以取到您要帶入的參數了。 Temp=AnsiString(CmdLine); // 修改前 Temp = ParamStr(0); // 修改後 取得執行的名稱及路徑。 Temp = ParamStr(1); // 修改後 取得執行檔後的第一個參數。 蝦程速,有了 K.TOP 尊好。
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-06 08:51:02 IP:61.66.xxx.xxx 未訂閱
引言: 哥您這樣太累了,請您把以下這行改成下下一行的樣子,就可以取到您要帶入的參數了。 Temp=AnsiString(CmdLine); // 修改前 Temp = ParamStr(0); // 修改後 取得執行的名稱及路徑。 Temp = ParamStr(1); // 修改後 取得執行檔後的第一個參數。
casper97你好 我在BCB上面也是用smartboss的方法來讀取參數 因為你只問如何使用argc,argv來傳遞參數 所以不知道你不會切參數的方式 另外再提供你一種其他Compiler(不支援ParamStr時)的方式 你可以用strtok然後用" "來當每個參數的分界點 用法請在網站上搜尋一下,可以找到非常多的資料
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-06 08:58:57 IP:61.66.xxx.xxx 未訂閱
引言: 另外一個問題, 就是我在程式中如何呼叫其他程式來執行呢? 謝謝!
http://delphi.ktop.com.tw/topic.php?topic_id=55573 【BCB】【問題】如何讓自己寫的程式可以另外開啟"小算盤"?
casper97
一般會員


發表:13
回覆:18
積分:11
註冊:2004-12-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-06 09:08:07 IP:202.39.xxx.xxx 未訂閱
Dear blk5743 和 smartboss:    萬分感謝您倆的指導, 因為小弟是 C++ Builder 的新手, 很多用法都還不知道。    在此問題的標題中還有一個問題想要請教, 在 C++ Builder 中, 有沒有什麼指令或函數, 可以在程式執行當中, 呼叫另一支程式起來執行? 比如說在我的程式執行時, 順便呼叫起 calc.exe (小算盤) 這支程式起來執行?    希望大家能指導一下! 謝謝!  -------------------------------------- 人類因夢想而偉大,但也要吃飯才會長大!
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-06 10:01:21 IP:61.66.xxx.xxx 未訂閱
引言: 在 C Builder 中, 有沒有什麼指令或函數, 可以在程式執行當中, 呼叫另一支程式起來執行? 比如說在我的程式執行時, 順便呼叫起 calc.exe (小算盤) 這支程式起來執行?
casper97你好 我在上一篇不是貼了一篇文章來開小算盤嗎 基本上你可以用ShellExecute及WinExec在程式中再開別的程式 用法在網站上搜尋或BCB HELP中都有
系統時間:2024-05-19 12:43:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!