使用CommandLineToArgvW获得Unicode版本GUI程序的命令行参数

控制台程序通过main函数接口可以方便的实现命令行接口(CLI)并访问系统的环境变量,但是GUI程序隐藏了WinMain函数,淡化了CLI的作用。但是CLI依旧存在,并在程序的测试诊断和个性化定制上依旧起到特殊的作用。

众所周知控制台下main函数原形和MS定义的wmain函数原形,当然如果包含头文件<tchar.h>也可以用_tmain

int main( int argc, char* argv[], char* envp[]);
int wmain( int argc, wchar_t* argv[], wchar_t* envp[]);
int _tmain( int argc, _TCHAR* argv[], _TCHAR* envp[]);

下面是这段程序,编译运行后就可以在控制台输出命令行参数和系统的环境变量。

#include "stdafx.h"    //包含#include <tchar.h>
#include <iostream>
#include <string.h>
#ifdef _UNICODE
#define _tcout	std::wcout
#else
#define _tcout	std::cout
#endif
int _tmain(int argc, _TCHAR* argv[], _TCHAR* envp[])
{
	_tcout <<_T("[argv]")<< std::endl;
	for( int i = 0; i < argc; ++i ) 
		_tcout << i << _T(":\t") << argv[i] << std::endl;
	_tcout << std::endl <<_T("[envp]")<< std::endl;
	for( int i = 0; envp[i] != NULL; ++i ) 
		_tcout << i << _T(":\t") << envp[i] << std::endl;
	_tsystem(_T("pause"));
	return 0;
}

Unicode版本GUI程序,可以使用GetCommandLineW 和 CommandLineToArgvW函数来获得参数。

例如下面的程序

CMyApp::CMyApp()
{
	int nArgs;
	LPWSTR* lpArgs = CommandLineToArgvW(GetCommandLineW(), &nArgs);
	ASSERT( NULL != lpArgs );

	for(int i=0; i<nArgs; i++)
		TRACE(_T("%d:\t%ws\n"), i, lpArgs[i]);

	//注意:需要释放字符串空间
	LocalFree(lpArgs);
}

注意:

因为CommandLineToArgvW函数仅有Unicode版本,没有ANSI版本,因此GetCommandLine函数强制使用Unicode版本形式GetCommandLineW


你可能感兴趣的:(cli,GetCommandLine)