2020class CXSpiImpl :public CXSpi
2121{
2222public:
23- virtual void OnConnectionStatus (ConnectionStatus status, RspUserLoginField* pUserLogin, int size1)
23+ CXSpiImpl () :CXSpi()
24+ {
25+ count = 0 ;
26+ }
27+
28+ virtual void OnConnectionStatus (CXApi* pApi, ConnectionStatus status, RspUserLoginField* pUserLogin, int size1)
2429 {
2530 printf (" %d\r\n " , status);
2631 if (status == ConnectionStatus::Done)
2732 {
28- // 得到当前的时间
29- time_t rawtime;
30- struct tm * timeinfo;
31- time (&rawtime);
32- timeinfo = localtime (&rawtime);
33- int mon = timeinfo->tm_mon ;
34- char buf[64 ] = { 0 };
35- /* for (int i = 0; i < 12; ++i)
33+ if ((pApi->GetApiType () & ApiType::MarketData) == ApiType::MarketData)
3634 {
37- int x = mon + i;
38- int a = x / 12;
39- int b = x % 12;
40- sprintf(buf, "IF%d%02d", (1900 + timeinfo->tm_year + a) % 100, b + 1);
41- m_pApi->Subscribe(buf, "");
42- sprintf(buf, "TF%d%02d", (1900 + timeinfo->tm_year + a) % 100, b + 1);
43- m_pApi->Subscribe(buf, "");
44- }*/
35+ // 得到当前的时间
36+ time_t rawtime;
37+ struct tm * timeinfo;
38+ time (&rawtime);
39+ timeinfo = localtime (&rawtime);
40+ int mon = timeinfo->tm_mon ;
41+ char buf[64 ] = { 0 };
42+ for (int i = 0 ; i < 12 ; ++i)
43+ {
44+ int x = mon + i;
45+ int a = x / 12 ;
46+ int b = x % 12 ;
47+ sprintf (buf, " IF%d%02d" , (1900 + timeinfo->tm_year + a) % 100 , b + 1 );
48+ pApi->Subscribe (buf, " " );
49+ sprintf (buf, " TF%d%02d" , (1900 + timeinfo->tm_year + a) % 100 , b + 1 );
50+ pApi->Subscribe (buf, " " );
51+ }
52+ }
4553 }
4654 }
47- virtual void OnRtnError (ErrorField* pError){};
55+ virtual void OnRtnError (CXApi* pApi, ErrorField* pError){};
4856
49- virtual void OnRtnDepthMarketData (DepthMarketDataField* pMarketData)
57+ virtual void OnRtnDepthMarketData (CXApi* pApi, DepthMarketDataField* pMarketData)
5058 {
5159 printf (" %s,%f,%d\r\n " , pMarketData->Symbol , pMarketData->LastPrice , ++count);
5260 }
5361
54- virtual void OnRtnQuoteRequest (QuoteRequestField* pQuoteRequest){};
62+ virtual void OnRtnQuoteRequest (CXApi* pApi, QuoteRequestField* pQuoteRequest){};
5563
56- virtual void OnRspQryInstrument (InstrumentField* pInstrument, int size1, bool bIsLast){};
57- virtual void OnRspQryTradingAccount (AccountField* pAccount, int size1, bool bIsLast){};
58- virtual void OnRspQryInvestorPosition (PositionField* pPosition, int size1, bool bIsLast){};
59- virtual void OnRspQrySettlementInfo (SettlementInfoField* pSettlementInfo, int size1, bool bIsLast){};
60- virtual void OnRspQryInvestor (InvestorField* pInvestor, int size1, bool bIsLast){};
61- virtual void OnRtnOrder (OrderField* pOrder)
64+ virtual void OnRspQryInstrument (CXApi* pApi, InstrumentField* pInstrument, int size1, bool bIsLast){};
65+ virtual void OnRspQryTradingAccount (CXApi* pApi, AccountField* pAccount, int size1, bool bIsLast){};
66+ virtual void OnRspQryInvestorPosition (CXApi* pApi, PositionField* pPosition, int size1, bool bIsLast){};
67+ virtual void OnRspQrySettlementInfo (CXApi* pApi, SettlementInfoField* pSettlementInfo, int size1, bool bIsLast){};
68+ virtual void OnRspQryInvestor (CXApi* pApi, InvestorField* pInvestor, int size1, bool bIsLast){};
69+ virtual void OnRtnOrder (CXApi* pApi, OrderField* pOrder)
6270 {
6371 printf (" %d,%s\r\n " , pOrder->ErrorID ,pOrder->Text );
6472 }
65- virtual void OnRtnTrade (TradeField* pTrade){};
66- virtual void OnRtnQuote (QuoteField* pQuote){};
73+ virtual void OnRtnTrade (CXApi* pApi, TradeField* pTrade){};
74+ virtual void OnRtnQuote (CXApi* pApi, QuoteField* pQuote){};
6775
68- virtual void OnRspQryHistoricalTicks (TickField* pTicks, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
69- virtual void OnRspQryHistoricalBars (BarField* pBars, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
76+ virtual void OnRspQryHistoricalTicks (CXApi* pApi, TickField* pTicks, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
77+ virtual void OnRspQryHistoricalBars (CXApi* pApi, BarField* pBars, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
7078
71- virtual bool OnFilterSubscribe (ExchangeType exchange, int instrument_part1, int instrument_part2, int instrument_part3, char * pInstrument)
79+ virtual bool OnFilterSubscribe (CXApi* pApi, ExchangeType exchange, int instrument_part1, int instrument_part2, int instrument_part3, char * pInstrument)
7280 {
7381 // 当数字为0时,只判断交易所
7482 // 当交易所为
@@ -94,7 +102,7 @@ class CXSpiImpl :public CXSpi
94102 return true ;
95103 }
96104public:
97- CXApi* m_pApi;
105+ // CXApi* m_pApi;
98106 int count;
99107};
100108
@@ -186,7 +194,7 @@ int main_1(int argc, char* argv[])
186194
187195
188196
189- int main (int argc, char * argv[])
197+ int main_2 (int argc, char * argv[])
190198{
191199 CXSpiImpl* p = new CXSpiImpl ();
192200
@@ -225,7 +233,7 @@ int main(int argc, char* argv[])
225233}
226234
227235
228- int main_3 (int argc, char * argv[])
236+ int main (int argc, char * argv[])
229237{
230238 CXSpiImpl* p = new CXSpiImpl ();
231239#if defined WINDOWS || _WIN32
@@ -255,7 +263,7 @@ int main_3(int argc, char* argv[])
255263 return -1 ;
256264 }
257265
258- p->m_pApi = pApi1;
266+ // p->m_pApi = pApi1;
259267 pApi1->RegisterSpi (p);
260268
261269#if defined WINDOWS || _WIN32
@@ -277,94 +285,3 @@ int main_3(int argc, char* argv[])
277285 return 0 ;
278286}
279287
280- #include " ../include/XApiC.h"
281- #include < stdlib.h>
282- #include " ../QuantBox_TongShi_Quote/Stockdrv.h"
283-
284-
285- #define WM_USER_STOCK 2000
286-
287- typedef int (WINAPI *pFunStock_Init)(HWND hWnd, UINT Msg, int nWorkMode);
288- typedef int (WINAPI *pFunStock_Quit)(HWND hWnd);
289-
290- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
291- {
292- if (message == WM_USER_STOCK)
293- {
294- printf (" %d" ,wParam);
295- }
296- else if (message == WM_NCDESTROY)
297- {
298- }
299- return DefWindowProc (hwnd, message, wParam, lParam);
300- }
301-
302- int main_8 (int argc, char * argv[])
303- {
304- HWND m_hWnd;
305- HMODULE m_hModule;
306- pFunStock_Init m_pStock_Init;
307- pFunStock_Quit m_pStock_Quit;
308-
309- m_hWnd = CreateWindowA (
310- " static" ,
311- " MsgRecv" ,
312- WS_OVERLAPPEDWINDOW | WS_VISIBLE,
313- CW_USEDEFAULT,
314- CW_USEDEFAULT,
315- CW_USEDEFAULT,
316- CW_USEDEFAULT,
317- NULL ,
318- NULL ,
319- NULL ,
320- NULL );
321-
322- m_hModule = LoadLibraryExA (" D:\\ Scengine\\ Stock.dll" , nullptr , LOAD_WITH_ALTERED_SEARCH_PATH);
323- if (m_hModule == nullptr )
324- {
325- return 0 ;
326- }
327-
328- m_pStock_Init = (pFunStock_Init)GetProcAddress (m_hModule, " Stock_Init" );
329- m_pStock_Quit = (pFunStock_Quit)GetProcAddress (m_hModule, " Stock_Quit" );
330- if (m_pStock_Init == nullptr )
331- {
332- return 0 ;
333- }
334-
335- if (m_hWnd != NULL && IsWindow (m_hWnd))
336- {
337- LONG l = SetWindowLong (m_hWnd, GWL_WNDPROC, (LONG)WndProc);
338- }
339- m_pStock_Init (m_hWnd, WM_USER_STOCK, RCV_WORK_SENDMSG);
340-
341-
342- MSG msg;
343- while (true )
344- {
345- if (PeekMessage (&msg, NULL , 0 , 0 , PM_NOREMOVE))
346- {
347- if (GetMessage (&msg, NULL , 0 , 0 ))
348- {
349- TranslateMessage (&msg);
350- DispatchMessage (&msg);
351- }
352- }
353- else
354- {
355- Sleep (1 );
356- }
357-
358- }
359- m_pStock_Quit (m_hWnd);
360- DestroyWindow (m_hWnd);
361-
362- // X_FreeLib(m_hModule);
363- m_hModule = nullptr ;
364- m_hWnd = nullptr ;
365-
366-
367- return 0 ;
368- }
369-
370-
0 commit comments