C++控制台程序 启动 控制台程序(以及命令行参数传递)

来源:互联网 发布:遗传算法与工程优化 编辑:程序博客网 时间:2024/06/04 23:29


#include "stdafx.h"
#include <windows.h>
#include <process.h>
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
 STARTUPINFO si = { sizeof(si) };
 PROCESS_INFORMATION pi;

 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口
 TCHAR cmdline[] =TEXT("D://Projects//RealPlayTestMFC//Debug//RealPlayDecode.exe http://community.csdn.net/");
 BOOL bRet = ::CreateProcess (
  NULL,
  cmdline, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改 
  NULL,
  NULL,
  FALSE,
  CREATE_NEW_CONSOLE,
  NULL,
  NULL,
  &si,
  &pi);

 //TCHAR cmdline[] =TEXT("D://Projects//RealPlayTestMFC//Debug//RealPlayDecode.exehttp://community.csdn.net/");
 //BOOL bRet = ::CreateProcess (
 // "D://Projects//RealPlayTestMFC//Debug//RealPlayDecode.exe",
 // "http://community.csdn.net/", //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改 
 // NULL,
 // NULL,
 // FALSE,
 // CREATE_NEW_CONSOLE,
 // NULL,
 // NULL,
 // &si,
 // &pi);

 //TCHAR cmdline[] =TEXT("D://Projects//RealPlayTestMFC//Debug//RealPlayDecode.exehttp://community.csdn.net/");
 //BOOL bRet = ::CreateProcess (
 // L"D://work//Dll//ICE//SRC//NetLibServer//Debug//IceServerHCAPP.exe",
 // NULL, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改 
 // NULL,
 // NULL,
 // FALSE,
 // CREATE_NEW_CONSOLE,
 // NULL,
 // NULL,
 // &si,
 // &pi);


 int error = GetLastError();
 if(bRet)
 {
  ::CloseHandle (pi.hThread);
  ::CloseHandle (pi.hProcess);

  printf(" 新进程的进程ID号:%d /n", pi.dwProcessId);
  printf(" 新进程的主线程ID号:%d /n", pi.dwThreadId);
 }
 else
 {
  printf("error code:%d/n",error );
 }
 return 0;
}

 

 

int _tmain(/*int argc, _TCHAR* argv[]*/)
{
 const char * strCommandLine = GetCommandLine();

 cout<<strCommandLine<<endl;

 //cout<<argc<<endl;
 //cout<<argv[0]<<endl;
 //cout<<argv[1]<<endl;
 ////---------------------------------------
 system("pause");
 return 0;
}

 

C++控制台程序使用main作为入口函数,原型如下:

int main(int argc, char *argv[]);

其中argc表示argv这个字符串数组的元素个数,而argv[0]表示的是这个程序本身的文件名,argv[1]表示的是第一个参数,argv[2]表示的是第二个参数。。。

追问:

那么我请问,argv[0]表示的是这个程序本身的文件名 这句话,也就是说,如果我开发服务端的哪个程序,也就是UPDServer[0] 这么写? 还有在main函数里面定义的int argc 需要在int main{} 里面再指定 个数吗? 还有 那个名字是规定的吗?

回答:

。。。

argv这个是形参的名称,名称你也可以自己改,不过一般是用的argv。

我所说的“argv[0]表示的是这个程序本身的文件名”,说的是argv[0]这个char *类型的值是指向“所在程序的文件名的字符串”的指针。

 

 

原创粉丝点击