CreateProcess传递参数到_tWinMain

 

用CreateProcess创建的子进程所获得的命令行参数有以下几种情况:

1.子进程中,WinMain函数的第三个参数lpCmdLine表示的命令行参数中除去应用程序路径、文件名以及与参数相隔的空格等字符串后的内容。比如

父进程:

CreateProcess(NULL, “c://test.exe -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,lpCmdLine参数为-p,注意没有双引号

 

2.如果通过lpCmdLine参数查看命令行参数,那么父进程创建子进程的时候,需要在子程序和参数中加上空格号。比如:

父进程:

CreateProcess(“c://test.exe”,“ -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,lpCmdLine参数为-p,没有空格了。

 

3.如果想获得子进程的完整命令行参数,调用GetCommandLine函数。通常通过GetCommandLine函数获得的命令行参数,是父进程调用时的完整参数

CreateProcess(NULL, “c://test.exe -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,GetCommandLine返回的参数为c://test.exe -p,注意没有双引号

 

以下情况都是调用GetCommandLine函数获得命令行参数

4.CreateProcess第一个参数是NULL,第二个参数指定子应用程序和命令行参数,那么子进程的命令行参数是第二个参数,不带双引号。比如:

父进程:

CreateProcess(NULL, “c://test.exe -p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,GetCommandLine获得的命令行参数为c://test.exe -p

 

5.CreateProcess第一个参数指定子应用程序路径和文件名,第二个参数为NULL,那么子进程的命令行参数是第一个参数,带双引号。比如:

父进程:

CreateProcess(“c://test.exe“, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,GetCommandLine获得的命令行参数为”c://test.exe“

 

6.CreateProcess第一个参数指定子应用程序路径和文件名,第二个参数为传递给子进程的参数,那么子进程的命令行参数是第二个参数,不带双引号。比如:

父进程:

CreateProcess(“c://test.exe“, ”-p“, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

子进程中,GetCommandLine获得的命令行参数为-p。

此处注意同第二点比较,如果用lpCmdLine查看命令行参数,没什么都没有。但是将”-p”改成” -p”,用可以看到参数是-p,是不是很混乱?

 

 

 

 

 

 

http://support.microsoft.com/kb/175986

CreateProcess() 创建 32 位进程时的行为

CreateProcess() 不会强制实施 ANSI 规范的参数传递给 16-位应用程序。这将引发的方式 CreateProcess 从一个应用程序到下一个应用程序的工作并要求您知道您生成的应用程序是 16 位或 32 位的可执行文件之间不一致可能令人困惑的问题。若要进一步使问题变得复杂,CreateProcess 是在 Windows 95 和 Windows NT 中稍有不同实现。

Windows NT 行为:

如果该 CommandLine 中的第一个"参数"并不完全 ApplicationName 字符串相同,然后它将替换它之前执行应用程序。例如,如果 ApplicationName 和 CommandLine 参数,如下所示:

  CreateProcess( "c://MyApp16.exe", "Param1 Param2 Param3", ...)
				

次要,应用程序可以看到该命令行参数如下所示:

  argv[0] == "c:/MyApp16.exe"
  argv[1] == "Param2"
  argv[2] == "Param3"
				

Windows 95 行为:

如果该 CommandLine 中的第一个"参数"并不完全 ApplicationName 字符串相同,CreateProcess 将失败并找不到错误的文件。如此一来没有理由呈传递 NULL 作为要在 Windows 95,如果要执行一个 16 位应用程序中的 CreateProcess ApplicationName 参数。

阅读更多
文章标签: null windows c 工作
个人分类:
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭