using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace TdxHqApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //DLL32λ,˱C#ɵĿƽ̨Any CPUΪX86,ܵDLL;
            //TdxHqApi.dllƵDebugReleaseĿ¼;
            //ʲôԱ̣ϸĶVCڵĹDLLĹܺͲ˵ϸĶʱ侫ޣˡ

            StringBuilder Result = new StringBuilder(1024 * 1024);
            StringBuilder ErrInfo = new StringBuilder(256);

            bool bool1 = TdxHq_Connect("218.18.103.38", 7709, Result, ErrInfo);
            if (!bool1)
            {
                Console.WriteLine(ErrInfo.ToString());
                return;
            }
	    Console.WriteLine(Result.ToString());


            byte[] Market = { 0, 1, 1, 0 };
            string[] Zqdm = { "000001", "600030", "600000", "000750" };
            short Count = 4;
            bool1 = TdxHq_GetSecurityQuotes(Market, Zqdm, ref Count, Result, ErrInfo);

            if (bool1)
            {
                Console.WriteLine(Result.ToString());
            }
            else
            {
                Console.WriteLine(ErrInfo.ToString());
            }

            TdxHq_Disconnect();
        }

        /// <summary>
        ///  ͨ,ַȯ¼еͨѶв
        /// </summary>
        /// <param name="IP">IP</param>
        /// <param name="Port">˿</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_Connect(string IP, int Port, StringBuilder Result, StringBuilder ErrInfo);

        /// <summary>
        /// Ͽͬ
        /// </summary>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        public static extern void TdxHq_Disconnect();



        /// <summary>
        /// ȡ֤ȯK
        /// </summary>
        /// <param name="Category">K, 0->5K    1->15K    2->30K  3->1СʱK    4->K  5->K  6->K  7->1    10->K  11->K< / param>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Start">K߿ʼλ,һKλ0, ǰһ1, </param>
        /// <param name="Count">APIִǰ,ʾûҪKĿ, APIִк,ʵʷصKĿ, ֵ800</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetSecurityBars(byte Category, byte Market, string Zqdm, short Start, ref short Count, StringBuilder Result, StringBuilder ErrInfo);

        /// <summary>
        /// ȡָK
        /// </summary>
        /// <param name="Category">K, 0->5K    1->15K    2->30K  3->1СʱK    4->K  5->K  6->K  7->1  8->1K  9->K  10->K  11->K< / param>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Start">K߿ʼλ,һKλ0, ǰһ1, </param>
        /// <param name="Count">APIִǰ,ʾûҪKĿ, APIִк,ʵʷصKĿ, ֵ800</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetIndexBars(byte Category, byte Market, string Zqdm, short Start, ref short Count, StringBuilder Result, StringBuilder ErrInfo);

        /// <summary>
        /// ȡʱ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetMinuteTimeData(byte Market, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);


        /// <summary>
        /// ȡʷʱ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Date">, 201411Ϊ20140101</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetHistoryMinuteTimeData(byte Market, string Zqdm, int Date, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡF10ϵķ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        /// 
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetCompanyInfoCategory(byte Market, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡF10ϵĳһ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="FileName">Ŀļ, TdxHq_GetCompanyInfoCategoryϢлȡ</param>
        /// <param name="Start">ĿĿʼλ, TdxHq_GetCompanyInfoCategoryϢлȡ</param>
        /// <param name="Length">Ŀĳ, TdxHq_GetCompanyInfoCategoryϢлȡ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ,ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetCompanyInfoContent(byte Market, string Zqdm, string FileName, int Start, int Length, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡȨϢϢ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ,ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetXDXRInfo(byte Market, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡϢ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ,ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetFinanceInfo(byte Market, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡʱɽ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Start">K߿ʼλ,һKλ0, ǰһ1, </param>
        /// <param name="Count">APIִǰ,ʾûҪļ¼Ŀ, APIִк,ʵʷصļ¼Ŀ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetTransactionData(byte Market, string Zqdm, short Start, ref short Count, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡʷʱɽ
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Start">K߿ʼλ,һKλ0, ǰһ1, </param>
        /// <param name="Count">APIִǰ,ʾûҪļ¼Ŀ, APIִк,ʵʷصļ¼Ŀ</param>
        /// <param name="Date">, 201411Ϊ20140101</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetHistoryTransactionData(byte Market, string Zqdm, short Start, ref short Count, int Date, StringBuilder Result, StringBuilder ErrInfo);



        /// <summary>
        /// ȡ嵵
        /// </summary>
        /// <param name="Market">г,   0->     1->Ϻ</param>
        /// <param name="Zqdm">֤ȯ</param>
        /// <param name="Count">APIִǰ,ʾ֤ȯļ¼Ŀ, APIִк,ʵʷصļ¼Ŀ</param>
        /// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
        /// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
        /// <returns>ɹtrue, ʧܷfalse</returns>
        [DllImport("TdxHqApi.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.I1)]
        public static extern bool TdxHq_GetSecurityQuotes(byte[] Market, string[] Zqdm, ref short Count, StringBuilder Result, StringBuilder ErrInfo);
    }
}
