// TdxHqDemoCpp.cpp : ̨Ӧóڵ㡣
//

#include "stdafx.h"
#include <windows.h>
#include <winbase.h>
#include <iostream>

using namespace std;


//ĵ
//

//1.APITdxHqApi.dllļĵº(麯ΪͻѯǷ)
//bool  TdxHq_Connect(char* IP, int Port, char* Result, char* ErrInfo);//ȯ
//void  TdxHq_Disconnect();//Ͽ
//bool  TdxHq_GetSecurityCount(byte Market, short& Result, char* ErrInfo);//ȡָгڵ֤ȯĿ
//bool  TdxHq_GetSecurityList(byte Market, short Start, short& Count, char* Result, char* ErrInfo);//ȡгָΧڵ֤ȯ
//bool  TdxHq_GetSecurityBars(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//ȡƱK
//bool  TdxHq_GetIndexBars(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//ȡָK
//bool  TdxHq_GetMinuteTimeData(byte Market, char* Zqdm, char* Result, char* ErrInfo);//ȡʱͼ
//bool  TdxHq_GetHistoryMinuteTimeData(byte Market, char* Zqdm, int date, char* Result, char* ErrInfo);//ȡʷʱͼ
//bool  TdxHq_GetTransactionData(byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//ȡʱɽ
//bool  TdxHq_GetHistoryTransactionData(byte Market, char* Zqdm, short Start, short& Count, int date, char* Result, char* ErrInfo);//ȡʷʱɽ
//bool  TdxHq_GetSecurityQuotes(byte Market[], char* Zqdm[], short& Count, char* Result, char* ErrInfo);//ȡ̿嵵
//bool  TdxHq_GetCompanyInfoCategory(byte Market, char* Zqdm, char* Result, char* ErrInfo);//ȡF10Ϣ
//bool  TdxHq_GetCompanyInfoContent(byte Market, char* Zqdm, char* FileName, int Start, int Length, char* Result, char* ErrInfo);//ȡF10Ϣ
//bool  TdxHq_GetXDXRInfo(byte Market, char* Zqdm, char* Result, char* ErrInfo);//ȡȨϢ
//bool  TdxHq_GetFinanceInfo(byte Market, char* Zqdm, char* Result, char* ErrInfo);//ȡ


///ӿִкʧܣַErrInfo˳Ϣ˵
///ɹַResult˽,ʽΪݣ֮ͨ\nַָ֮ͨ\tָ
///صResultݶ\n,\tַָѯKݣصĽַ

///ʱ\t̼\t̼\t߼\tͼ\tɽ\tɽ\n
///20150519\t4.644000\t4.732000\t4.747000\t4.576000\t146667487\t683638848.000000\n
///20150520\t4.756000\t4.850000\t4.960000\t4.756000\t353161092\t1722953216.000000

///ôַָ֮ͨ ԻָΪмеıʽ



//2.APIʹΪ: ӦóȵTdxHq_Connectͨ,ȻſԵӿڻȡ,ӦóӦд, ӿ̰߳ȫ
//ߣapiapi᷵ѾߵĴϢӦóӦݴ˴Ϣӷ


//3.˵
/// <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>
typedef bool (__stdcall*  TdxHq_ConnectDelegate)(char* IP, int Port, char* Result, char* ErrInfo);


/// <summary>
/// Ͽͬ
/// </summary>
typedef void(__stdcall* TdxHq_DisconnectDelegate)();




/// <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λ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>
typedef bool(__stdcall* TdxHq_GetSecurityBarsDelegate)(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);





/// <summary>
/// ȡг֤ȯ
/// </summary>
/// <param name="Market">г,   0->     1->Ϻ</param>
/// <param name="Result">APIִзغResultڱ˷ص֤ȯ</param>
/// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
/// <returns>ɹtrue, ʧܷfalse</returns>
typedef bool(__stdcall* TdxHq_GetSecurityCountDelegate)(byte Market, short& Result, char* ErrInfo);


/// <summary>
/// ȡгĳΧڵ1000֧ƱĹƱ
/// </summary>
/// <param name="Market">г,   0->     1->Ϻ</param>
/// <param name="Start">Χʼλ,һƱ0, ڶ1, ,λϢTdxHq_GetSecurityCountص֤ȯȷ</param>
/// <param name="Count">ΧĴСAPIִк,ʵʷصĹƱĿ,</param>
/// <param name="Result">APIִзغResultڱ˷ص֤ȯϢ,ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
/// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
/// <returns>ɹtrue, ʧܷfalse</returns>
typedef bool(__stdcall* TdxHq_GetSecurityListDelegate)(byte Market, short Start, short& Count, char* Result, char* 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λ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>
typedef bool (__stdcall* TdxHq_GetIndexBarsDelegate)(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* 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>
typedef bool (__stdcall* TdxHq_GetMinuteTimeDataDelegate)(byte Market, char* Zqdm, char* Result, char* 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>
typedef bool(__stdcall* TdxHq_GetHistoryMinuteTimeDataDelegate)(byte Market, char* Zqdm, int Date, char* Result, char* ErrInfo);


/// <summary>
/// ȡʱɽĳΧڵ
/// </summary>
/// <param name="Market">г,   0->     1->Ϻ</param>
/// <param name="Zqdm">֤ȯ</param>
/// <param name="Start">Χʼλ,һKλ0, ǰһ1, </param>
/// <param name="Count">ΧСAPIִǰ,ʾûҪKĿ, APIִк,ʵʷصKĿ</param>
/// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
/// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
/// <returns>ɹtrue, ʧܷfalse</returns>
typedef bool(__stdcall* TdxHq_GetTransactionDataDelegate) (byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);


/// <summary>
/// ȡʷʱɽĳΧڵ
/// </summary>
/// <param name="Market">г,   0->     1->Ϻ</param>
/// <param name="Zqdm">֤ȯ</param>
/// <param name="Start">Χʼλ,һKλ0, ǰһ1, </param>
/// <param name="Count">ΧСAPIִǰ,ʾûҪKĿ, APIִк,ʵʷصKĿ</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>
typedef bool(__stdcall* TdxHq_GetHistoryTransactionDataDelegate) (byte Market, char* Zqdm, short Start, short& Count, int Date, char* Result, char* ErrInfo);

/// <summary>
/// ȡ֤ȯ嵵
/// </summary>
/// <param name="Market">г,   0->     1->Ϻ, iԪرʾi֤ȯг</param>
/// <param name="Zqdm">֤ȯ, Count֤ȯɵ</param>
/// <param name="Count">APIִǰ,ʾûҪ֤ȯĿ,50(ͬȯ̿ܲһ,Ŀѯȯ̻), APIִк,ʵʷصĿ</param>
/// <param name="Result">APIִзغResultڱ˷صĲѯ, ʽΪݣ֮ͨ\nַָ֮ͨ\tָһҪ1024*1024ֽڵĿռ䡣ʱΪַ</param>
/// <param name="ErrInfo">APIִзغ˴Ϣ˵һҪ256ֽڵĿռ䡣ûʱΪַ</param>
/// <returns>ɹtrue, ʧܷfalse</returns>
typedef bool(__stdcall* TdxHq_GetSecurityQuotesDelegate) (byte Market[], char* Zqdm[], short& Count, char* Result, char* 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>
typedef bool(__stdcall* TdxHq_GetCompanyInfoCategoryDelegate) (byte Market, char* Zqdm, char* Result, char* 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>
typedef bool(__stdcall* TdxHq_GetCompanyInfoContentDelegate) (byte Market, char* Zqdm, char* FileName, int Start, int Length, char* Result, char* 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>
typedef bool(__stdcall* TdxHq_GetXDXRInfoDelegate) (byte Market, char* Zqdm, char* Result, char* 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>
typedef bool(__stdcall* TdxHq_GetFinanceInfoDelegate) (byte Market, char* Zqdm, char* Result, char* ErrInfo);




int _tmain(int argc, _TCHAR* argv[])
{
	//dll, dllҪƵdebugreleaseĿ¼,öַֽ,ûʱԼƸʾСλ뾫
	HMODULE TdxApiHMODULE = LoadLibrary("TdxHqApi.dll");

	//ȡapi
	TdxHq_ConnectDelegate TdxHq_Connect = (TdxHq_ConnectDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_Connect");
	TdxHq_DisconnectDelegate TdxHq_Disconnect = (TdxHq_DisconnectDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_Disconnect");
	TdxHq_GetSecurityBarsDelegate TdxHq_GetSecurityBars = (TdxHq_GetSecurityBarsDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetSecurityBars");
	TdxHq_GetIndexBarsDelegate TdxHq_GetIndexBars = (TdxHq_GetIndexBarsDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetIndexBars");
	TdxHq_GetMinuteTimeDataDelegate TdxHq_GetMinuteTimeData = (TdxHq_GetMinuteTimeDataDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetMinuteTimeData");
	TdxHq_GetHistoryMinuteTimeDataDelegate TdxHq_GetHistoryMinuteTimeData = (TdxHq_GetHistoryMinuteTimeDataDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetHistoryMinuteTimeData");
	TdxHq_GetTransactionDataDelegate TdxHq_GetTransactionData = (TdxHq_GetTransactionDataDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetTransactionData");
	TdxHq_GetHistoryTransactionDataDelegate TdxHq_GetHistoryTransactionData = (TdxHq_GetHistoryTransactionDataDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetHistoryTransactionData");
	TdxHq_GetSecurityQuotesDelegate TdxHq_GetSecurityQuotes = (TdxHq_GetSecurityQuotesDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetSecurityQuotes");
	TdxHq_GetCompanyInfoCategoryDelegate TdxHq_GetCompanyInfoCategory = (TdxHq_GetCompanyInfoCategoryDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetCompanyInfoCategory");
	TdxHq_GetCompanyInfoContentDelegate TdxHq_GetCompanyInfoContent = (TdxHq_GetCompanyInfoContentDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetCompanyInfoContent");
	TdxHq_GetXDXRInfoDelegate TdxHq_GetXDXRInfo = (TdxHq_GetXDXRInfoDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetXDXRInfo");
	TdxHq_GetFinanceInfoDelegate TdxHq_GetFinanceInfo = (TdxHq_GetFinanceInfoDelegate)GetProcAddress(TdxApiHMODULE, "TdxHq_GetFinanceInfo");



	//ʼȡ
	char* Result = new char[1024 * 1024];
	char* ErrInfo = new char[256];
	short Count = 10;

	//ӷ
	bool bool1=TdxHq_Connect("218.18.103.38", 7709, Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;//ʧ
		return 0;
	}
	cout << Result << endl;



	//ȡƱK
	//bool1 = TdxHq_GetSecurityBars(0, 0, "000001", 0, Count, Result, ErrInfo);//, 0->5K    1->15K    2->30K  3->1СʱK    4->K  5->K  6->K  7->1K  8->1K  9->K  10->K  11->K
	//if (!bool1)
	//{
	//	cout << ErrInfo << endl;
	//	return 0;
	//}
	//cout << Result << endl;



	//ȡָK
	bool1 = TdxHq_GetIndexBars(4, 1, "000001", 0, Count, Result, ErrInfo);//, 0->5K    1->15K    2->30K  3->1СʱK    4->K  5->K  6->K  7->1K     8->1K    9->K  10->K  11->K
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;





	//ȡʱͼ
	/*bool1 = TdxHq_GetMinuteTimeData(0, "000001",  Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/


	//ȡʷʱͼ
	/*bool1 = TdxHq_GetHistoryMinuteTimeData(0, "000001", 20140904, Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/


	//ȡֱͼ
	/*bool1 = TdxHq_GetTransactionData(0, "000001", 0, Count, Result, ErrInfo);
	if (!bool1)
	{
	cout << ErrInfo << endl;
	return 0;
	}
	cout << Result << endl;*/



	//ȡʷֱͼ
	/*bool1 = TdxHq_GetHistoryTransactionData(0, "000001", 0, Count, 20140904,  Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/




	//ȡ嵵
	/*byte Market[] = {0,1};
	char* Zqdm[] = {"000001","600030"};
	short ZqdmCount = 2;
	bool1 = TdxHq_GetSecurityQuotes(Market, Zqdm, ZqdmCount, Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl; */



	//ȡF10ݵ
	/*bool1 = TdxHq_GetCompanyInfoCategory(0, "000001", Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/



	//ȡF10ݵĳ
	/*bool1 = TdxHq_GetCompanyInfoContent(1, "600030", "600030.txt", 0, 16824, Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/


	//ȡȨϢϢ
	/*bool1 = TdxHq_GetXDXRInfo(0, "000001", Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/





    //ȡϢ
	/*bool1 = TdxHq_GetFinanceInfo(0, "000001", Result, ErrInfo);
	if (!bool1)
	{
		cout << ErrInfo << endl;
		return 0;
	}
	cout << Result << endl;*/






	TdxHq_Disconnect();

	cout << "ѾϿ"<<endl;


	FreeLibrary(TdxApiHMODULE);

	int a;
	cin >> a;

	return 0;
}

