Esempio n. 1
0
 public int Connect(string server = "127.0.0.1", int port = 9999)
 {
     if (com == null)
     {
         //インスタンス化&接続
         com = new CommunicationMql4();
         return com.Connect(server,port);
     }
     else
     {
         return 0;
     }
 }
Esempio n. 2
0
        public void Start()
        {
            Connect();

            //リフレクションでメソッドを呼ぶDelegateをラムダ式で作成。comに入れる。
            com.resvSpecialFunctionEvent = (string funcName, string[] paramStrArr) =>
                {
                    //メソッドをゲット
                    MethodInfo method = this.GetType().GetMethod(funcName);

                    //エラー処理
                    if(method == null || !method.IsVirtual)
                    {
                        throw new Exception();
                    }

                    //メソッドの引数の情報をゲット
                    ParameterInfo[] paramInfos = method.GetParameters();

                    //メソッドの引数を入れる物
                    List<Object> paramObjList = new List<Object>();

                    //メソッドの引数のTypeでキャストする
                    //paramStrArrがNullだったら実行しない
                    for(int i = 0; paramStrArr != null && i < paramStrArr.Length; i++)
                    {
                        //引数一致しなかったらエラー
                        if(!(paramInfos.Length < i))
                        {
                            throw new Exception();
                        }

                        //paramのString
                        string paramStr = paramStrArr[i];

                        //paramのInfo
                        ParameterInfo paramInfo = paramInfos[i];

                        //キャストの為にParseメソッドをGet
                        //確認したParseメソッドは以下
                        //int.Parse,string.Parse,double.Parse,long.Parse
                        MethodInfo parse = paramInfos[i].ParameterType.GetMethod("Parse");

                        //Parseメソッドがあったか
                        if(parse != null)
                        {
                            try
                            {
                                //あったのでParse
                                object parsedObj = parse.Invoke(null, new string[] { paramStr });
                                //追加
                                paramObjList.Add(parsedObj);
                            }
                            catch (TargetInvocationException e)
                            {
                                //InnerExceptionがFormatExceptionかどうか
                                if (e.InnerException is FormatException)
                                {
                                    //Parseに失敗したのでCast&追加
                                    paramObjList.Add(Convert.ChangeType(paramStrArr[i], paramInfos[i].ParameterType));
                                }
                                else
                                {
                                    throw;
                                }
                            }
                        }
                        else
                        {
                            //なかったのでCast&追加
                            paramObjList.Add(Convert.ChangeType(paramStrArr[i], paramInfos[i].ParameterType));
                        }

                    }

                    //メソッドの引数の配列を作成
                    //paramObjListがnullか要素数0ならnull、それ以外ならparamObjListの内容を入れる
                    object[] paramObjArr = paramObjList == null || paramObjList.Count == 0 ? null : paramObjList.ToArray();

                    //メソッド実行
                    object result = method.Invoke(this, paramObjArr);

                    //Stringに変換
                    return result.ToString();
                };

            //回す
            com.WaitSpecialFunction();

            //開放&SocketClose
            com = null;
        }