casper97
一般會員
發表:13 回覆:18 積分:11 註冊:2004-12-30
發送簡訊給我
|
各位高手! 小弟想要在程式進行中,
呼叫其他的執行檔起來執行,
並且要使用 argc、argv 的參數傳遞,
來初始被呼叫的程式,
該怎麼做? 另外在被呼叫的程式中,
在 BCB 下應該怎麼做,
才能讀到外來 argc、argv 的參數? 煩請各位高手指導!
不勝感激! --------------------------------------
人類因夢想而偉大,但也要吃飯才會長大!
|
blk5743
高階會員
發表:34 回覆:371 積分:236 註冊:2003-11-17
發送簡訊給我
|
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
發送簡訊給我
|
感謝 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
發送簡訊給我
|
引言:
感謝 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
發送簡訊給我
|
引言:
哥您這樣太累了,請您把以下這行改成下下一行的樣子,就可以取到您要帶入的參數了。
Temp=AnsiString(CmdLine); // 修改前
Temp = ParamStr(0); // 修改後 取得執行的名稱及路徑。
Temp = ParamStr(1); // 修改後 取得執行檔後的第一個參數。
casper97你好 我在BCB上面也是用smartboss的方法來讀取參數
因為你只問如何使用argc,argv來傳遞參數
所以不知道你不會切參數的方式 另外再提供你一種其他Compiler(不支援ParamStr時)的方式
你可以用strtok然後用" "來當每個參數的分界點
用法請在網站上搜尋一下,可以找到非常多的資料
|
blk5743
高階會員
發表:34 回覆:371 積分:236 註冊:2003-11-17
發送簡訊給我
|
引言:
另外一個問題,
就是我在程式中如何呼叫其他程式來執行呢?
謝謝!
http://delphi.ktop.com.tw/topic.php?topic_id=55573
【BCB】【問題】如何讓自己寫的程式可以另外開啟"小算盤"?
|
casper97
一般會員
發表:13 回覆:18 積分:11 註冊:2004-12-30
發送簡訊給我
|
Dear blk5743 和 smartboss: 萬分感謝您倆的指導,
因為小弟是 C++ Builder 的新手,
很多用法都還不知道。 在此問題的標題中還有一個問題想要請教,
在 C++ Builder 中,
有沒有什麼指令或函數,
可以在程式執行當中,
呼叫另一支程式起來執行?
比如說在我的程式執行時,
順便呼叫起 calc.exe (小算盤) 這支程式起來執行? 希望大家能指導一下!
謝謝! --------------------------------------
人類因夢想而偉大,但也要吃飯才會長大!
|
blk5743
高階會員
發表:34 回覆:371 積分:236 註冊:2003-11-17
發送簡訊給我
|
引言:
在 C Builder 中,
有沒有什麼指令或函數,
可以在程式執行當中,
呼叫另一支程式起來執行?
比如說在我的程式執行時,
順便呼叫起 calc.exe (小算盤) 這支程式起來執行?
casper97你好 我在上一篇不是貼了一篇文章來開小算盤嗎
基本上你可以用ShellExecute及WinExec在程式中再開別的程式
用法在網站上搜尋或BCB HELP中都有
|