zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[wxWidgets]_[0基础]_[不常见但有用的类wxCmdLineParser]

基础 常见 有用
2023-09-11 14:15:00 时间


场景:

1. 有时候须要构造命令行字符串传递給函数调用,比方CreateProcess,假设參数是动态的,那么就得使用类似std::vector<string>加入单个參数,之后拼接为一个string.

wx有给这类处理类。就是wxCmdLineParser ,它既能拼接为字符串。又能够把字符串分解为一个參数数组。


console.cpp

#include "wx/wxprec.h"

#ifndef WX_PRECOMP
    #include "wx/wx.h"
#endif

#include "wx/cmdline.h"
#include "wx/app.h" 
#include <assert.h>
#include <iostream>
#include <stdio.h>


using namespace std;

void TestParseCmdLine()
{
	cout << "TestParseCmdLine" << endl;
	wxString cmd("gcc -c -o test.exe test.cpp");
	//1.解析字符串
	wxCmdLineParser parser;
	//parser.SetCmdLine(0,(char**)NULL);
	wxArrayString arr = parser.ConvertStringToArgs(cmd);
	for(int i = 0; i < arr.size(); ++i)
	{
		cout << arr[i] << endl;
	}
	//2.生成字符串
	
	parser.AddParam(wxT("gcc"));
	parser.AddParam(wxT("-c"));
	parser.AddParam(wxT("-o"));
	parser.AddParam(wxT("test.exe"));
	parser.AddParam(wxT("test.cpp"));
	//parser.Reset();
	//parser.Parse();
	cout << "parser.GetParamCount(): " << parser.GetParamCount() << endl;
	for(int i = 0; i < parser.GetParamCount(); ++i)
	{
		cout << parser.GetParam(i) << endl;
	}
	cout << "argv: " << wxTheApp->GetAppName() << endl;
	wxString str = parser.GetUsageString();
	wxString appName = wxTheApp->GetAppName();
	cout << "parser: " << str.Mid(str.Find(wxTheApp->GetAppName())+appName.Length()+1) << endl;
}

int main(int argc,char* argv[])
{
	wxInitialize();
	wxEntryStart(argc,argv);
	wxInitAllImageHandlers();

	TestParseCmdLine();

	wxEntryCleanup();
	wxUninitialize();
	return 0;
}





输出:

TestParseCmdLine
gcc
-c
-o
test.exe
test.cpp
parser.GetParamCount(): 0
argv: test_wxCmdLineParser
parser: gcc -c -o test.exe test.cpp