Skip to content

Commit dbacd17

Browse files
committed
C++接口传入当前API指针
1 parent 36a11f0 commit dbacd17

File tree

4 files changed

+74
-157
lines changed

4 files changed

+74
-157
lines changed

QuantBox_XAPI/XApiImpl.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,53 +24,53 @@ void* CXApiImpl::_OnRespone(char type, void* pApi1, void* pApi2, double double1,
2424
switch (rt)
2525
{
2626
case OnConnectionStatus:
27-
m_pSpi->OnConnectionStatus((ConnectionStatus)(char)double1, (RspUserLoginField*)ptr1, size1);
27+
m_pSpi->OnConnectionStatus(this, (ConnectionStatus)(char)double1, (RspUserLoginField*)ptr1, size1);
2828
break;
2929
case OnRtnError:
30-
m_pSpi->OnRtnError((ErrorField*)ptr1);
30+
m_pSpi->OnRtnError(this, (ErrorField*)ptr1);
3131
break;
3232
case OnRtnDepthMarketData:
33-
m_pSpi->OnRtnDepthMarketData((DepthMarketDataField*)ptr1);
33+
m_pSpi->OnRtnDepthMarketData(this, (DepthMarketDataField*)ptr1);
3434
break;
3535
case OnRspQryInstrument:
36-
m_pSpi->OnRspQryInstrument((InstrumentField*)ptr1, size1, double1 != 0);
36+
m_pSpi->OnRspQryInstrument(this, (InstrumentField*)ptr1, size1, double1 != 0);
3737
break;
3838
case OnRspQryTradingAccount:
39-
m_pSpi->OnRspQryTradingAccount((AccountField*)ptr1, size1, double1 != 0);
39+
m_pSpi->OnRspQryTradingAccount(this, (AccountField*)ptr1, size1, double1 != 0);
4040
break;
4141
case OnRspQryInvestorPosition:
42-
m_pSpi->OnRspQryInvestorPosition((PositionField*)ptr1, size1, double1 != 0);
42+
m_pSpi->OnRspQryInvestorPosition(this, (PositionField*)ptr1, size1, double1 != 0);
4343
break;
4444
case OnRspQrySettlementInfo:
45-
m_pSpi->OnRspQrySettlementInfo((SettlementInfoField*)ptr1, size1, double1 != 0);
45+
m_pSpi->OnRspQrySettlementInfo(this, (SettlementInfoField*)ptr1, size1, double1 != 0);
4646
break;
4747

4848
case OnRtnOrder:
49-
m_pSpi->OnRtnOrder((OrderField*)ptr1);
49+
m_pSpi->OnRtnOrder(this, (OrderField*)ptr1);
5050
break;
5151
case OnRtnTrade:
52-
m_pSpi->OnRtnTrade((TradeField*)ptr1);
52+
m_pSpi->OnRtnTrade(this, (TradeField*)ptr1);
5353
break;
5454

5555
case OnRtnQuote:
56-
m_pSpi->OnRtnQuote((QuoteField*)ptr1);
56+
m_pSpi->OnRtnQuote(this, (QuoteField*)ptr1);
5757
break;
5858
case OnRtnQuoteRequest:
59-
m_pSpi->OnRtnQuoteRequest((QuoteRequestField*)ptr1);
59+
m_pSpi->OnRtnQuoteRequest(this, (QuoteRequestField*)ptr1);
6060
break;
6161

6262
case OnRspQryHistoricalTicks:
63-
m_pSpi->OnRspQryHistoricalTicks((TickField*)ptr1, size1, (HistoricalDataRequestField*)ptr2, size2, double1 != 0);
63+
m_pSpi->OnRspQryHistoricalTicks(this, (TickField*)ptr1, size1, (HistoricalDataRequestField*)ptr2, size2, double1 != 0);
6464
break;
6565
case OnRspQryHistoricalBars:
66-
m_pSpi->OnRspQryHistoricalBars((BarField*)ptr1, size1, (HistoricalDataRequestField*)ptr2, size2, double1 != 0);
66+
m_pSpi->OnRspQryHistoricalBars(this, (BarField*)ptr1, size1, (HistoricalDataRequestField*)ptr2, size2, double1 != 0);
6767
break;
6868

6969
case OnRspQryInvestor:
70-
m_pSpi->OnRspQryInvestor((InvestorField*)ptr1, size1, double1 != 0);
70+
m_pSpi->OnRspQryInvestor(this, (InvestorField*)ptr1, size1, double1 != 0);
7171
break;
7272
case OnFilterSubscribe:
73-
return (void*)m_pSpi->OnFilterSubscribe((ExchangeType)(char)double1, (int)size1, (int)size1, (int)size3, (char*)ptr1);
73+
return (void*)m_pSpi->OnFilterSubscribe(this, (ExchangeType)(char)double1, (int)size1, (int)size1, (int)size3, (char*)ptr1);
7474
default:
7575
break;
7676
}

QuantBox_XAPI_TEST/QuantBox_XAPI_TEST.cpp

Lines changed: 43 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -20,55 +20,63 @@
2020
class CXSpiImpl :public CXSpi
2121
{
2222
public:
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
}
96104
public:
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-

include/XApiCpp.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,30 @@
99

1010
#include "../include/ApiStruct.h"
1111

12-
12+
class CXApi;
1313

1414
class CXSpi
1515
{
1616
public:
17-
virtual void OnConnectionStatus(ConnectionStatus status, RspUserLoginField* pUserLogin, int size1){};
18-
virtual void OnRtnError(ErrorField* pError){};
17+
virtual void OnConnectionStatus(CXApi* pApi, ConnectionStatus status, RspUserLoginField* pUserLogin, int size1){};
18+
virtual void OnRtnError(CXApi* pApi, ErrorField* pError){};
1919

20-
virtual void OnRtnDepthMarketData(DepthMarketDataField* pMarketData){};
21-
virtual void OnRtnQuoteRequest(QuoteRequestField* pQuoteRequest){};
20+
virtual void OnRtnDepthMarketData(CXApi* pApi, DepthMarketDataField* pMarketData){};
21+
virtual void OnRtnQuoteRequest(CXApi* pApi, QuoteRequestField* pQuoteRequest){};
2222

23-
virtual void OnRspQryInstrument(InstrumentField* pInstrument, int size1, bool bIsLast){};
24-
virtual void OnRspQryTradingAccount(AccountField* pAccount, int size1, bool bIsLast){};
25-
virtual void OnRspQryInvestorPosition(PositionField* pPosition, int size1, bool bIsLast){};
26-
virtual void OnRspQrySettlementInfo(SettlementInfoField* pSettlementInfo, int size1, bool bIsLast){};
27-
virtual void OnRspQryInvestor(InvestorField* pInvestor, int size1, bool bIsLast){};
28-
virtual void OnRtnOrder(OrderField* pOrder){};
29-
virtual void OnRtnTrade(TradeField* pTrade){};
30-
virtual void OnRtnQuote(QuoteField* pQuote){};
23+
virtual void OnRspQryInstrument(CXApi* pApi, InstrumentField* pInstrument, int size1, bool bIsLast){};
24+
virtual void OnRspQryTradingAccount(CXApi* pApi, AccountField* pAccount, int size1, bool bIsLast){};
25+
virtual void OnRspQryInvestorPosition(CXApi* pApi, PositionField* pPosition, int size1, bool bIsLast){};
26+
virtual void OnRspQrySettlementInfo(CXApi* pApi, SettlementInfoField* pSettlementInfo, int size1, bool bIsLast){};
27+
virtual void OnRspQryInvestor(CXApi* pApi, InvestorField* pInvestor, int size1, bool bIsLast){};
28+
virtual void OnRtnOrder(CXApi* pApi, OrderField* pOrder){};
29+
virtual void OnRtnTrade(CXApi* pApi, TradeField* pTrade){};
30+
virtual void OnRtnQuote(CXApi* pApi, QuoteField* pQuote){};
3131

32-
virtual void OnRspQryHistoricalTicks(TickField* pTicks, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
33-
virtual void OnRspQryHistoricalBars(BarField* pBars, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
32+
virtual void OnRspQryHistoricalTicks(CXApi* pApi, TickField* pTicks, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
33+
virtual void OnRspQryHistoricalBars(CXApi* pApi, BarField* pBars, int size1, HistoricalDataRequestField* pRequest, int size2, bool bIsLast){};
3434

35-
virtual bool OnFilterSubscribe(ExchangeType exchange, int instrument_part1, int instrument_part2, int instrument_part3, char* pInstrument){ return true; };
35+
virtual bool OnFilterSubscribe(CXApi* pApi, ExchangeType exchange, int instrument_part1, int instrument_part2, int instrument_part3, char* pInstrument){ return true; };
3636
};
3737

3838
class DLL_PUBLIC CXApi

lib/QuantBox_XAPI.lib

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)