文档章节

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

seanking
 seanking
发布于 2016/02/15 14:27
字数 384
阅读 62
收藏 0

控制台程序通过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


© 著作权归作者所有

共有 人打赏支持
seanking
粉丝 3
博文 14
码字总数 5960
作品 0
杭州
高级程序员
Windows10 64bit + CodeBlock16.01 + wxWidgets3.0.2配置

一、首先说一下配置的整体开发环境: 1. windows 10 64位; 2. CodeBlock 16.01 64位安装版本,带mingw的codeblocks-16.01mingw-setup.exe,地址http://sourceforge.net/projects/codeblock...

binux
2016/10/27
391
0
VC-Logger v2.0.3 发布,高性能 Windows C++ 日志组件

VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版...

伤神小怪兽
2013/06/14
1K
0
高性能 C++ 通用日志组件--VC-Logger

VC-Logger 是一个简单易用的 C++ 程序通用日志组件。设计时着重考虑三个方面:功能、可用性和性能。为了让大家能更方便的学习 VC-Logger,特此精心制作了几个测试用例:TestGUILogger(GUI 版...

伤神小怪兽
2013/06/13
12.3K
0
使用Ahk2Exe工具将AutoHotKey脚本打包到Windows可执行文件

写在前面的两点说明: 1、我的操作系统版本为Win7,AutoHotKey版本为1.1.23.05。 2、因AutoHotKey单词太长,所以在下文中统一用缩写AHK代替。 方法一:通过Windows上下文菜单快速创建EXE文件...

北风其凉
2016/04/27
212
0
Ansi与Unicode及慎用W2A等

Ansi与Unicode简要说明及各自的优缺点 他们是两种字符的编码格式,Ansi=窄字节,Unicode=宽字节,Ansi用char格式表示一个字符,占用一个字节的存储空间,最多表示255个字符, 表示英文还可以...

IMGTN
2012/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
18分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
20分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
21分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部