zoukankan      html  css  js  c++  java
  • 量化金融小初探

    用C#访问IFind的简单例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Runtime.Serialization;
    //using Newtonsoft.Json;
    using System.Text.RegularExpressions;
    using System.Threading;
    
    namespace ConsoleiFind
    {    
        class Program
        {
            /*
             * D:iFinDReleaseiFinDinx86:该目录是用户本地的iFinD安装目录且修复的位数是32位,如果是64位则目录为D:iFinDReleaseiFinDinx64
             * FTDataInterface.dll为接口文件,该文件是32位的,如果是64位,则文件名称为FTDataInterface_x64.dll
             */
    
            //当前FTDataInterface.dll或者FTDataInterface_x64.dll文件的获取可以通过修复C++接口得到:【iFinD终端-工具-数据接口-C++修复文件】
            const string strPath = @"D:\金融\DataInterface_free_Windows\bin\x64\";
            const string strDllFileName = "FTDataInterface_x64.dll";        
            const string strDllFile = strPath + strDllFileName;
    
            static void Main(string[] args)
            {
                /*登录函数
             
                 */
                string strUserName = "";
                string strPassWord = "";
                int nRet = THS_iFinDLogin(strUserName, strPassWord);
               string strOut = "Login result:" + nRet;
               Console.WriteLine(strOut);
    
                _event = new AutoResetEvent(false);
                ThreadStart threadStart = new ThreadStart(testSample);
                Thread thread = new Thread(threadStart);
                thread.Start();
                _event.WaitOne();
    
                //登出函数
                nRet = THS_iFinDLogout();
              strOut = "Logout result:" + nRet;
             Console.WriteLine(strOut);
    
                Console.ReadLine();
            }
    
            private static AutoResetEvent _event;
            public static void testSample()
            {
                //高频序列函数
                HighFrequenceSequenceSample();
    
                //实时行情函数
                RealtimeQuotesSample();
    
                //历史行情函数
                HistoryQuotesSample();
    
                //基础数据函数
                BasicDataSample();
    
                //日期序列函数
                DateSequenceSample();
    
                //数据池函数
                DataPoolSample();
    
                //EDB数据请求函数
                EDBQuerySample();
    
                //数据使用量统计函数
                DataStatisticsSample();
    
                //错误信息查询函数
                GetErrorInfoSample();
    
                //日期请求函数
                DateQuerySample();
    
                //日期偏移函数
                DateOffsetSample();
    
                //日期统计函数
                DateCountSample();
    
                Thread.Sleep(3000);
                _event.Set();
    
            }
    
            static void HighFrequenceSequenceSample()
            {
                string strOut;
                //请求高频数据  传递5个字符串参数,返回数据
                /*高频序列函数格式为THS_HighFrequenceSequence('thsCodes','indicators','params','startTime','endTime')
                 * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
                 * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
                 * params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:5'
                 * startDate的日期输入格式为YYYY-MM-DD HH:MM:SS
                 * endDate的日期输入格式为YYYY-MM-DD HH:MM:SS
                 * THS_HighFrequenceSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startTime','endTime')
                 */
                strOut = THS_HighFrequenceSequence("600000.SH,300033.SZ", "open;high", "CPS:1,Interval:5,Fill:Previous", "2016-09-01 09:30:00", "2016-09-01 15:30:00");
                //高频序列函数
                Console.WriteLine("高频序列函数");
                Console.WriteLine(strOut);
            }
    
            static void RealtimeQuotesSample()
            {
                string strOut;
                //请求实时数据
                /*实时行情函数的格式为THS_RealtimeQuotes('thsCodes','indicators','params')
                 * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
                 * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
                 * params不可以为空
                 * THS_RealtimeQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3')
                 */
                strOut = THS_RealtimeQuotes("600000.SH,300033.SZ", "open;close;new;avg;change;price;volume", "pricetype:2");
               // 实时行情函数
                Console.WriteLine("实时行情函数");
                Console.WriteLine(strOut);
            }
    
            static void HistoryQuotesSample()
            {
                string strout;
                //请求历史行情
                /*
                 *通过历史行情函数获取同花顺(300033.SZ)从2016-08-23到2016-11-23的开高低收数据
                 *历史行情函数格式为THS_HistoryQuotes('thsCodes','indicators','params','startDate','endDate')
                 *thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
                 *indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
                 *params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'period:W'
                 *startDate的日期输入格式为YYYY-MM-DD
                 *endDate的日期输入格式为YYYY-MM-DD
                 *THS_HistoryQuotes('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
                 */
                strout = THS_HistoryQuotes("300033.SZ,600000.SH", "open;high;low;close", "period:D,pricetype:1,rptcategory:0,fqdate:1900-01-01,hb:YSHB", "2016-11-09", "2016-12-08");
                //历史行情函数
                Console.WriteLine("历史行情函数");
                Console.WriteLine(strout);
            }
    
            static void BasicDataSample()
            {
                string strOut;
                //请求基础数据
                /*基础数据THS_BasicData('thsCodes','function','params');支持多证券单指标输入
                 * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
                 * function不可以为空,且当前只支持单个function,目前函数名称可以在【iFinD终端-工具-数据接口-指标函数查询工具】查看
                 * params可以为空,也可以有多个,当有多个params时则用英文半角逗号分隔,如param1,param2,param3
                 * THS_BasicData('thsCode1,thsCode2,thsCode3','function','param1,param2,param3')
                 */
                strOut = THS_BasicData("600000.SH,300033.SZ", "ths_mgsyeps_jb_stock", "2016-09-30");
                //基础数据函数
                Console.WriteLine("基础数据函数");
                Console.WriteLine(strOut);
            }
    
            static void DateSequenceSample()
            {
                string strOut;
                //请求日期序列
                /*日期系列函数格式为THS_DateSequence('thsCodes','indicators','params','startDate','endDate')
                 * thsCodes不可以为空,且支持多个输入,当有多个thsCodes则用英文半角逗号分隔,如thsCode1,thsCode2,thsCode3
                 * indicators不可以为空,且支持多个输入,当有多个indicators则用英文半角分号分隔,如indicator1;indicator2;indicator3
                 * params不可以为空,且支持多个输入,当使用默认的参数时可以使用'default'表示,当用户只对其中某个指标设定而其他参数保持默认时,只需要输入设定的参数即可,如'Interval:M'
                 * startDate的日期输入格式为YYYY-MM-DD
                 * endDate的日期输入格式为YYYY-MM-DD
                 * 日期序列函数格式为THS_DateSequence('thsCode1,thsCode2,thsCode3','indicator1;indicator2;indicator3','param1,param2,param3','startDate','endDate')
                 */
                strOut = THS_DateSequence("600000.SH,300033.SZ", "open;BBI=BBI_day1:4,BBI_day2:7,BBI_day3:13,BBI_day4:25;close=close_fq_type:101", "CPS:1,Interval:W,Fill:Previous,Days:Workdays", "2014-12-18 09:30:00", "2015-01-22 15:30:00");
                //日期序列函数
                Console.WriteLine("日期序列函数");
                Console.WriteLine(strOut);
            }
    
            static void DataPoolSample()
            {
                string strOut;
                //请求数据池
                /*
                 * 数据池函数格式为THS_DataPool('modelName','inputParams','outputParams')
                 * modelName不可以为空,且一次只能输入一个
                 * inputParams用英文半角分号隔开,如inputParam1;inputParam2;inputParam3
                 * outputParams用英文半角冒号赋值,用英文半角逗号分隔,Y表示该字段输出,N表示该字段不输出,如果不写则默认为Y,如outputParam1:Y,outputParam2:Y,outputParam3:N
                 * THS_DataPool('modelName','inputParam1;inputParam2;inputParam3','outputParam1,outputParam2,outputParams3')
                 * 【001005260】是板块ID,目前板块ID可以在【iFinD终端-工具-数据接口-板块ID查询工具】查看
                 */
                strOut = THS_DataPool("block", "2016-12-19;001005260", "date:Y,security_name:Y,thscode:Y");
                //数据池函数
                Console.WriteLine("数据池函数");
                Console.WriteLine(strOut);
    
            }
    
            static void EDBQuerySample()
            {
                string strout;
                //请求EDB宏观经济数据
                /*EDB数据请求函数格式为THS_EDBQuery('indicatorIDs','startDate','endDate')
                 * indicatorIDs不可以为空,支持多个ID输入。指标ID可以在【iFinD终端-工具-数据接口】中的指标ID查询工具查看
                 * startDate的日期输入格式为YYYY-MM-DD
                 * endDate的日期输入格式为YYYY-MM-DD
                 */
                strout = THS_EDBQuery("M002945620", "2000-01-01", "2017-01-01");
                //EDB数据请求函数
                Console.WriteLine("EDB数据请求函数");
                Console.WriteLine(strout);
            }
    
            static void DataStatisticsSample()
            {
                string strout;
                //用户数据使用量查询函数
                /*
                 * 数据使用量查询函数,用于用户查询自身账号的数据使用量,其中行情数据是15000万条/周,基础数据是500万条/周,EDB数据是500条/周;
                 * 通过高频序列函数、历史行情函数和实时行情函数获取的数据统称为行情数据;
                 * 通过基础数据函数、日期序列函数和数据池函数获取的数据统称为基础数据;
                 * 通过EDB数据请求函数获取的数据统称为EDB数据。
                 */
                strout = THS_DataStatistics();
                //数据使用量统计函数
                Console.WriteLine("数据使用量统计函数");
                Console.WriteLine(strout);
            }
    
            static void GetErrorInfoSample()
            {
                string strout;
                //错误代码信息查询
                /*错误信息查询函数,对于函数执行后的errorcode进行查询,了解错误信息
                 * value的值不可以为空,并且value的值必须是枚举出的错误值
                 */
                strout = THS_GetErrorInfo(-1);
                //错误信息查询函数
                Console.WriteLine("错误信息查询函数");
                Console.WriteLine(strout);
            }
    
            static void DateQuerySample()
            {
                string strout;
                //方便用户在其自定义的时间区间内查询交易所的交易日历
                /*
                 * 交易日期/日历日期查询函数
                 * 日期查询函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
                 * exchange不可以为空
                 * dateType,period,dateFormat的值也不可以为空
                 * startDate的日期输入格式为YYYY-MM-DD
                 * endDate的日期输入格式为YYYY-MM-DD
                 */
                strout = THS_DateQuery("SSE", "dateType:trade,period:D,dateFormat:0", "2016-07-21", "2017-08-21");
                //日期请求函数
                Console.WriteLine("日期请求函数");
                Console.WriteLine(strout);
            }
    
            static void DateOffsetSample()
            {
                string strout;
                //根据用户指定一个日期和偏移量查询到相应的交易日期
                /*
                 * 根据指定日期和偏移量找到相应的日期
                 * 日期偏移函数的格式是THS_DateQuery('exchange','dateType:value,period:value,dateFormat:value','date')
                 * exchange不可以为空
                 * dateType,period,dateFormat的值也不可以为空
                 * date的日期输入格式为YYYY-MM-DD
                 */
                strout = THS_DateOffset("SSE", "dateType:trade,period:W,offset:-10,dateFormat:0", "2017-08-21");
                //日期偏移函数
                Console.WriteLine("日期偏移函数");
                Console.WriteLine(strout);
            }
    
            static void DateCountSample()
            {
                string strout;
                //方便用户统一在其自定义的时间区间内查询交易日期的总数
                /*
                 * 统计指定时间区间和日期类型中的日期数量
                 * 日期查询函数的格式是THS_DateCount('exchange','dateType:value,period:value,dateFormat:value','startDate','endDate')
                 * exchange不可以为空
                 * dateType,period,dateFormat的值也不可以为空
                 * startDate的日期输入格式为YYYY-MM-DD
                 * endDate的日期输入格式为YYYY-MM-DD
                 */
                strout = THS_DateCount("SSE", "dateType:trade,period:D,dateFormat:0", "2016-07-21", "2017-08-21");
                //日期统计函数
                Console.WriteLine("日期统计函数");
                Console.WriteLine(strout);
            }
    
    
    /********************************************************************************************************************************************************************/
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            public static extern int FT_ifinDLogin(string strUserName, string strPassWord, int nType);
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            public static extern int FT_ifinDLogout();
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern IntPtr FTQueryTHS_SynDateCountC(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string startDate, //函数需要的参数
                                                         string endDate,
                                                         out  char* pret
                                                         );
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern IntPtr FTQueryTHS_SynDateOffsetC(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string endDate,
                                                         out  char* pret
                                                         );
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern IntPtr FTQueryTHS_SynDateQueryC(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string startDate, //函数需要的参数
                                                         string endDate,
                                                         out  char* pret
                                                         );
    
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern int FTQueryTHS_SynDataPoolC(string DataPoolName, //数据池
                                                         string jsonIndicator, //
                                                         string jsonParam, //函数需要的参数
                                                         out  char* pret
                                                         );
    
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern int FTQueryTHS_SynDateSeriesC(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam, //函数需要的参数
                                                         string begintime,
                                                         string endtime,
                                                         out  char* pret
                                                         );
    
    
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern int FTQueryTHS_SynBasicDataC(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标
                                                         string jsonParam, //函数需要的参数
                                                         out  char* pret
                                                         );
    
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern int FTQueryTHS_SynHisQuoteC(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam, //函数需要的参数
                                                         string begintime,
                                                         string endtime,
                                                         out  char* pret
                                                         );
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
            unsafe public static extern int FTQueryTHS_SynRTByJsonC(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam, //函数需要的参数
                                                         out  char* pret
                                                         );
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            unsafe public static extern int FTQueryTHS_SynHFQByJsonC(string THSCodes,
                                                          string jsonIndicator,
                                                          string jsonParam,
                                                          string begintime,
                                                          string endtime,
                                                          out  char* pret);
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            unsafe public static extern int FTQueryTHS_SynEDBQueryC(string jsonIndicator,                                                    
                                                          string begintime,
                                                          string endtime,
                                                          out  char* pret);
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            unsafe public static extern int FTQueryTHS_SynGetErrorInfoC(int errorcode,
                                                          out  char* pret);
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            unsafe public static extern IntPtr FTQuery_SynDataStasticsC(out int errorcode, void* reserve1, void* reserve2, void* reserve3);
    
    
    
            [DllImport(strDllFile, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
            unsafe public static extern void DeleteBuffer(char* pret);
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //封装的函数命令  直接按照以下封装接口调用即可
    
            static int THS_iFinDLogin(string UserAcount, string Password)
            {
                int nRet = FT_ifinDLogin(UserAcount, Password, 0);
                return nRet;
            }
    
            static int THS_iFinDLogout()
            {
                int nRet = FT_ifinDLogout();
                return nRet;
            }
    
            unsafe static string THS_HighFrequenceSequence(string THSCodes,
                                                          string jsonIndicator,
                                                          string jsonParam,
                                                          string begintime,
                                                          string endtime)//高频序列新版接口
              {
                string strOut;
                char* Pret;
                FTQueryTHS_SynHFQByJsonC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_RealtimeQuotes(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam //函数需要的参数
                                                           )//实时行情新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynRTByJsonC(THSCodes, jsonIndicator, jsonParam, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_HistoryQuotes(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam, //函数需要的参数
                                                         string begintime,
                                                         string endtime
                                                         )//历史行情新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynHisQuoteC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_BasicData(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标
                                                         string jsonParam //函数需要的参数
                                                         )//基础数据新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynBasicDataC(THSCodes, jsonIndicator, jsonParam, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DateSequence(string THSCodes, //同花顺代码
                                                         string jsonIndicator, //指标及指标需要的参数
                                                         string jsonParam, //函数需要的参数
                                                         string begintime,
                                                         string endtime)//日期序列新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynDateSeriesC(THSCodes, jsonIndicator, jsonParam, begintime, endtime, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DataPool(string DataPoolName, //数据池
                                                         string jsonIndicator, //
                                                         string jsonParam //函数需要的参数
                                                         )//数据池新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynDataPoolC(DataPoolName, jsonIndicator, jsonParam, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DateQuery(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string startDate, //函数需要的参数
                                                         string endDate)//日期查询新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynDateQueryC(ExchangeCode, Param, startDate, endDate, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DateOffset(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string endDate)//日期便宜新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynDateOffsetC(ExchangeCode, Param, endDate, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DateCount(string ExchangeCode, //交易所
                                                         string Param, //参数
                                                         string startDate, //函数需要的参数
                                                         string endDate)//日期数量新版接口
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynDateCountC(ExchangeCode, Param, startDate, endDate,  out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_EDBQuery(string jsonIndicator,
                                                          string begintime,
                                                          string endtime
                                                          )
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynEDBQueryC(jsonIndicator, begintime, endtime, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
            unsafe static string THS_DataStatistics()
            {
                string strOut;
                int code;
                strOut = Marshal.PtrToStringUni(FTQuery_SynDataStasticsC(out code, null, null, null));
                return strOut;
            }
    
            unsafe static string THS_GetErrorInfo(int code)
            {
                string strOut;
                char* Pret;
                FTQueryTHS_SynGetErrorInfoC(code, out  Pret);
                IntPtr data = new IntPtr(Pret);
                strOut = Marshal.PtrToStringUni(data);
                DeleteBuffer(Pret);
                return strOut;
            }
    
    
        }
    }
    View Code
  • 相关阅读:
    苹果推送APNS自己总结
    Windows下LDAP服务器配置
    service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误
    PHP 中的 9 个魔术方法
    使用 Equinox 开发 OSGi 应用程序
    使用 Equinox 框架进行 OSGi 环境下的 Web 开发
    探索 OSGi 框架的组件运行机制
    基于 OSGi 和 Spring 开发 Web 应用
    Equinox OSGI ServletBridge 原理与实践
    利用 Eclipse 开发基于 OSGi 的 Bundle 应用
  • 原文地址:https://www.cnblogs.com/shiningleo007/p/12574741.html
Copyright © 2011-2022 走看看