找回密码
 注册帐号

扫一扫,访问微社区

提笔写忧伤 exe传参启动

38
回复
5172
查看
[ 复制链接 ]
排名
672
昨日变化

19

主题

1193

帖子

3595

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
13
蛮牛币
18613
威望
0
注册时间
2015-1-14
在线时间
1005 小时
最后登录
2019-7-23
2018-8-17 18:51:54 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
    最近刚刚换了个公司,项目端游,定位海外市场,进公司首先安排些launcher 登录器启动unity exe 程序,使用MFC编写,写了花大概近2个月,各种趟坑,现在总算主要功能,以及他们的要求作完了。其实写这篇文章是想写一个unity的exe 程序结合 launcher 登录器,或者 dos命令行传参启动的,外部传参接受存储,提取功能。   好了转正文:
unity的exe 启动接受参数的关键函数是:System.Environment.GetCommandLineArgs();函数返回  string[] 数组;
解释以下这个数组:下标0为我们的exe 程序的全路径,下标1往后面的为我们的启动传入的参数,但是通常我的设计是不会让它下标超过2个的,因为对于我的解析来说现对于那样使用不是很方便。因此我的设计下标只要0,1
说道这里其实使用一个string存储下标1 就完事了,要讲的也就讲完了!
其实不然!!那么下面是我如何存储解析这个参数的,使用一个全局脚本CommandLineMgr 来管理存储参数,静态接口,方便游戏内其他模块随时访问提取,好了代码如下:
1> 接受参数就是使用上面说道关键函数
[AppleScript] 纯文本查看 复制代码
    /// <summary>
    /// 接受方法
    /// </summary>
    /// <returns></returns>
    public static void Accept()
    {
        try
        {
            string[] args = System.Environment.GetCommandLineArgs();
            if (args.Length > 1)
            {
                string rcom = args[1];
                AnalyticalParameter(rcom);
            }
        }
        catch (Exception e)
        {
            Debug.Log("获取命令行参数失败!");
        }
    }



然后我定义了参数类型 使用了一个枚举
[AppleScript] 纯文本查看 复制代码
    public enum CommandLineType
    {
        Account,                                            //账号
        Password,                                          //密码
    }



然后存储,提取都会是根据枚举,得到想要得到的数据


好了,以下是解析函数就是对于 刚才说到的下标1 的string解析,存储到枚举值对应到的容器内
注:参数间使用 ; 分号分割,当然你如果喜欢其他符号分割也是可以的。
[AppleScript] 纯文本查看 复制代码
    /// <summary>
    /// 解析参数
    /// </summary>
    /// <param name="Command">参数字符</param>
    /// <returns></returns>
    private static void AnalyticalParameter(string Command)
    {
        string[] paramArray = Command.Split(';');
        for (int i = 0 ; i < paramArray.Length; i ++)
        {
            string param = paramArray[i];
            string[] pair = param.Split('=');

            if(pair.Length != 2)
                continue;

            string key = pair[0];
            string value = pair[1];

            CommandLineType type = (CommandLineType)Enum.Parse(typeof(CommandLineType), key);
            CommandLineParameter.Add(type, value);
        }
    }




好了到关键了,这时参数都存储到容器内了,怎么在需要模块内提取到信息呢?有人说了,简单!既然我上面都说了,枚举就是数据的key ,直接取出来就完了!不是不行,我是觉得这样子不太方便,看我是如何做的
[AppleScript] 纯文本查看 复制代码
public static T GetParam<T>(CommandLineType ctype)
    {
        System.Object obj = default(T);

        Type type = typeof(T);

        if(CommandLineParameter.ContainsKey(ctype))
        {
            string valueStr = CommandLineParameter[ctype];
            if (!string.IsNullOrEmpty(valueStr))
            {
                if (type == typeof(int))
                {
                    int n = -1;
                    if (int.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(float))
                {
                    float n = -1;
                    if (float.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(double))
                {
                    double n = -1;
                    if (double.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(string))
                {
                    obj = valueStr;
                }
                if (type == typeof(bool))
                {
                    bool boolValue;
                    if (!bool.TryParse(valueStr, out boolValue) && valueStr != "否" && valueStr != "0")
                    {
                        boolValue = true;
                    }
                    obj = boolValue;
                }
            }
        }
        return (T)obj;
    }




我是根据想要的这个枚举数据,你认为它是什么基础类型,就传入对应 T,就输出对应类型,比如我提供了2个测试数据,账号跟密码,我都可以以为它们是数字类型,也可以是string 类型,看你的应用需求而定


好了,有点基础的人都能看得懂这部分代码,其实简单~主要想申明的是一种“懒人”的思想~,模块能封装的尽量封装出方便使用的方法或者接口,便于使用,便于扩展,对于维护量,bug 率的效果都是有很好的体现


下面放出测试工程,要学习的附件提取哦~
另外如果想测试效果,将他们打成EXE,使用命令行启动(由于你们没有launcher启动,命令行启动也是可以的) 输入例子: 112.png CommandLine.zip (4.71 KB, 下载次数: 428)
参与人数 1鲜花 +2 收起 理由
镜月之言 + 2 很给力!

查看全部评分总评分 : 鲜花 +2

回复

使用道具 举报

2初来乍到
139/150
排名
15587
昨日变化

0

主题

23

帖子

139

积分

Rank: 2Rank: 2

UID
224263
好友
0
蛮牛币
80
威望
0
注册时间
2017-5-30
在线时间
68 小时
最后登录
2019-7-22
2018-8-17 20:20:54 显示全部楼层
学习了!
回复

使用道具 举报

7日久生情
1662/5000
排名
2091
昨日变化

1

主题

542

帖子

1662

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56245
好友
1
蛮牛币
4487
威望
0
注册时间
2014-11-18
在线时间
457 小时
最后登录
2019-7-23
2018-8-17 22:40:05 显示全部楼层
难得的经验,好好学学习一下
回复 支持 反对

使用道具 举报

3偶尔光临
298/300
排名
6933
昨日变化

0

主题

47

帖子

298

积分

Rank: 3Rank: 3Rank: 3

UID
292147
好友
0
蛮牛币
917
威望
0
注册时间
2018-8-1
在线时间
61 小时
最后登录
2018-12-19
2018-8-18 07:59:52 显示全部楼层
66666666666666
回复

使用道具 举报

7日久生情
1840/5000
排名
1989
昨日变化

6

主题

558

帖子

1840

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
54335
好友
3
蛮牛币
5431
威望
0
注册时间
2014-11-9
在线时间
594 小时
最后登录
2019-7-23
2018-8-18 10:39:51 显示全部楼层
多谢楼主分享
回复

使用道具 举报

6蛮牛粉丝
1159/1500
排名
1586
昨日变化

0

主题

9

帖子

1159

积分

Rank: 6Rank: 6Rank: 6

UID
152977
好友
0
蛮牛币
2641
威望
0
注册时间
2016-6-21
在线时间
336 小时
最后登录
2019-6-21
2018-8-18 11:22:44 显示全部楼层
我一般都直接传个json进去,简单通用
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1372/1500
排名
1479
昨日变化

1

主题

249

帖子

1372

积分

Rank: 6Rank: 6Rank: 6

UID
2627
好友
0
蛮牛币
1026
威望
0
注册时间
2013-8-26
在线时间
266 小时
最后登录
2019-7-17
2018-8-18 16:01:01 显示全部楼层
我一般都直接传个json进去,简单通用
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1304/1500
排名
2342
昨日变化

0

主题

313

帖子

1304

积分

Rank: 6Rank: 6Rank: 6

UID
119648
好友
3
蛮牛币
1783
威望
0
注册时间
2015-8-25
在线时间
385 小时
最后登录
2019-6-14
QQ
2018-8-20 09:07:32 显示全部楼层
学习了!
回复

使用道具 举报

7日久生情
1535/5000
排名
3443
昨日变化

0

主题

895

帖子

1535

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
210390
好友
0
蛮牛币
1835
威望
0
注册时间
2017-3-7
在线时间
206 小时
最后登录
2019-5-23
2018-8-20 10:24:08 显示全部楼层
回复

使用道具 举报

7日久生情
1509/5000
排名
1701
昨日变化

0

主题

232

帖子

1509

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
224749
好友
1
蛮牛币
2436
威望
0
注册时间
2017-6-2
在线时间
509 小时
最后登录
2019-7-23
2018-8-21 09:35:50 显示全部楼层
学习学习
回复

使用道具 举报

7日久生情
2321/5000
排名
1613
昨日变化

72

主题

476

帖子

2321

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
71862
好友
28
蛮牛币
4169
威望
0
注册时间
2015-1-29
在线时间
745 小时
最后登录
2019-7-6

专栏作家蛮牛译员

2018-8-21 13:39:32 显示全部楼层
谢谢楼主分享,学习了
回复 支持 反对

使用道具 举报

5熟悉之中
877/1000
排名
2502
昨日变化

0

主题

66

帖子

877

积分

Rank: 5Rank: 5

UID
231194
好友
0
蛮牛币
2844
威望
0
注册时间
2017-7-10
在线时间
227 小时
最后登录
2019-6-24
2018-8-24 08:23:23 显示全部楼层
多谢楼主分享
回复

使用道具 举报

5熟悉之中
619/1000
排名
6776
昨日变化

0

主题

286

帖子

619

积分

Rank: 5Rank: 5

UID
250350
好友
2
蛮牛币
621
威望
0
注册时间
2017-10-23
在线时间
137 小时
最后登录
2019-5-28
2018-8-25 14:07:40 显示全部楼层
多谢楼主分享
回复

使用道具 举报

6蛮牛粉丝
1058/1500
排名
2332
昨日变化

7

主题

125

帖子

1058

积分

Rank: 6Rank: 6Rank: 6

UID
31690
好友
5
蛮牛币
17162
威望
0
注册时间
2014-6-28
在线时间
318 小时
最后登录
2019-7-23
2018-8-27 10:04:21 显示全部楼层
学习学习
回复

使用道具 举报

6蛮牛粉丝
1076/1500
排名
3330
昨日变化

3

主题

201

帖子

1076

积分

Rank: 6Rank: 6Rank: 6

UID
62741
好友
1
蛮牛币
1435
威望
0
注册时间
2014-12-21
在线时间
428 小时
最后登录
2019-7-15
2018-8-28 16:06:39 显示全部楼层
给力........................
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则