// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
return FALSE;
}
我们要获取程序的命令行参数,一般是在主对话框界面显示之前,即 CProjCleanerDlg dlg; 之前获取。
获取的方法主要是调用 GetCommandLine 和 CommandLineToArgvW 函数。
GetCommandLine 函数的原型定义如下:
LPTSTR WINAPI GetCommandLine(void);
没有参数,返回是一个LPTSTR类型的字符串指针,即命令行参数的字符串。
默认情况下,每个程序都会有一个命令行参数,即可执行程序本身的路径,第二个参数才是真正的附加命令行参数。
举个例子,调用GetCommandLine函数获取到的命令行参数的字符串大致如下:
"E:\SoftWare\ProjCleaner.exe" "-help"
其中,"E:\SoftWare\ProjCleaner.exe" 为可执行文件的路径,"-help" 为附加的参数。
调用完 GetCommandLine 函数获取到了命令行参数之后,
我们就要调用 CommandLineToArgvW 函数去分解得到的命令行参数字符串,
CommandLineToArgvW 函数的原型定义如下:
LPWSTR *CommandLineToArgvW(
LPCWSTR lpCmdLine,
int *pNumArgs
);
他有两个参数,第一个参数 lpCmdLine 即通过 GetCommandLine 函数获取到的命令行参数字符串指针,
第二个参数是一个 int 类型的指针,用这个参数返回命令行参数中的参数个数,
默认情况下,pNumArgs 会返回1,如果有附加的命令行参数,该会大于1,比如:
"E:\SoftWare\ProjCleaner.exe" "-help"
则,pNumArgs 会返回2。
CommandLineToArgvW 函数的返回是一个宽字节LPWSTR类型的字符串指针数组,
数组中的每一个字符串指针代表着一个命令行参数,根据上面的示例,
设返回为:
LPWSTR *lpszArgv,则 lpszArgv[0] 就是 "E:\SoftWare\ProjCleaner.exe",lpszArgv[1] 就是 "-help",这样大家明白了吧?
通过 GetCommandLine、CommandLineToArgvW 两个函数就可以成功的获取并拆分命令行参数了。
MFC也可以像控制台那样获取命令行参数:
利用GetCommandLineW()函数获得命令行参数,
利用CommandLineToArgvW()函数解析命令行参数。
LPWSTR *szArglist = NULL;
int nArgs = 0;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
if( NULL != szArglist)
{
//szArglist就是保存参数的数组
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-37210-2.html
猛禽配凡凡
一点养老钱也要放的踏实