Stockdrv.h
上传用户:wenjimin
上传日期:2014-08-12
资源大小:111k
文件大小:11k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /****************************************************************************************
  2. * WIN95 股票驱动程序 *
  3. *  西安交大数据广播研究中心 *
  4. *      1998.3.5 *
  5. *****************************************************************************************/
  6. /****************************************************************************************
  7. * 在注册库的 HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv 下 * 
  8. * Driver  = "驱动DLL全路径" *
  9. * Provider= "TongShi" *
  10. ****************************************************************************************/
  11. #ifndef __STOCKDRV_H__
  12. #define __STOCKDRV_H__
  13. /////////////////////////////////////////////////////////////////////////////////////////
  14. //  以下是接口方式一,引用 DOS 方式接口,只提供行情接口,
  15. // 补充数据及消息接口按接口方式二.
  16. // 工作方式类型定义
  17. #define RCV_WORK_SENDMSG 4 // 版本 2 建议使用的方式
  18. // 其他工作方式保留
  19. // 消息类型
  20. #define RCV_REPORT 0x3f001234
  21. #define RCV_FILEDATA 0x3f001235
  22. #define TS_StockDrv_IdTxt "TongShi_StockDrv_2.00" // 通视信息卡特征串
  23. //==================================== 数据结构 =================================================
  24. // 证券市场
  25. #define SH_MARKET_EX 'HS' // 上海
  26. #define SZ_MARKET_EX 'ZS' // 深圳
  27. #define HK_MARKET_EX 'KH' // 香港
  28. // 文件数据类型
  29. // 结构数组形式的文件数据
  30. #define FILE_HISTORY_EX 2 // 补日线数据
  31. #define FILE_MINUTE_EX 4 // 补分钟线数据
  32. #define FILE_POWER_EX 6 // 补充除权数据
  33. #define FILE_BASE_EX 0x1000 // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
  34. #define FILE_NEWS_EX 0x1002 // 新闻类,其类型由m_szFileName中子目录名来定
  35. #define FILE_HTML_EX 0x1004 // HTML文件,m_szFileName为URL
  36. #define FILE_SOFTWARE_EX 0x2000 // 升级软件
  37. #define FILE_SHAZQDATA_EX 0x3000 // 上海债券净价交易
  38. #define FILE_TYPE_RES -1 // 保留
  39. // 消息子类型
  40. #define News_Sha_Ex  2 // 上证消息
  41. #define News_Szn_Ex  4 // 深证消息
  42. #define News_Fin_Ex  6 // 财经报道
  43. #define News_TVSta_Ex  8 // 电视台通知
  44. #define News_Unknown_Ex  -1 // 未知提供者
  45. //Definition For nInfo of Function GetStockDrvInfo(int nInfo,void * pBuf);
  46. #define RI_IDSTRING 1 // 厂商名称,返回(LPCSTR)厂商名
  47. #define RI_IDCODE 2 // 卡号
  48. #define RI_VERSION 3 // 驱动程序版本
  49. #define RI_ERRRATE 4 // 取信道误码
  50. #define RI_STKNUM 5 // 取上市股票总家数
  51. #define RI_SUPPORTEXTHQ 6 // 是否支持JSJ格式
  52. #define RI_ENABLEDZHTRANS 7 // 支持传输大智慧文件系统
  53. #define RI_ENABLETS3FILE 8 // 支持文件传输
  54. #define STKLABEL_LEN 10 // 股号数据长度,国内市场股号编码兼容钱龙
  55. #define STKNAME_LEN 32 // 股名长度
  56. //////////////////////////////////////////////////////////////////////////////////
  57. //国债净价交易数据
  58. typedef struct GzLxBINData {
  59. WORD m_wMarket; // 股票市场类型
  60. char m_szLabel[STKLABEL_LEN]; // 股票代码,以''结尾
  61. DWORD m_LiXiDate; //开始计算利息的日期
  62. double m_fMoney100; //每100元的利息
  63. DWORD m_DayNum;; //利息计算天数
  64. float m_fShowPrice; //票面价格
  65. }GZLXBINDATA,*PGZLXBINDATA;
  66. //////////////////////////////////////////////////////////////////////////////////
  67. //行情数据
  68. typedef struct tagRCV_REPORT_STRUCTEx//: public CObject
  69. {
  70. WORD m_cbSize; // 结构大小
  71. time_t m_time; // 交易时间
  72. WORD m_wMarket; // 股票市场类型
  73. char m_szLabel[STKLABEL_LEN]; // 股票代码,以''结尾
  74. char m_szName[STKNAME_LEN]; // 股票名称,以''结尾
  75. float m_fLastClose; // 昨收
  76. float m_fOpen; // 今开
  77. float m_fHigh; // 最高
  78. float m_fLow; // 最低
  79. float m_fNewPrice; // 最新
  80. float m_fVolume; // 成交量
  81. float m_fAmount; // 成交额
  82. float m_fBuyPrice[3]; // 申买价1,2,3
  83. float m_fBuyVolume[3]; // 申买量1,2,3
  84. float m_fSellPrice[3]; // 申卖价1,2,3
  85. float m_fSellVolume[3]; // 申卖量1,2,3
  86. float m_fBuyPrice4; // 申买价4
  87. float m_fBuyVolume4; // 申买量4
  88. float m_fSellPrice4; // 申卖价4
  89. float m_fSellVolume4; // 申卖量4
  90. float m_fBuyPrice5; // 申买价5
  91. float m_fBuyVolume5; // 申买量5
  92. float m_fSellPrice5; // 申卖价5
  93. float m_fSellVolume5; // 申卖量5
  94. } RCV_REPORT_STRUCTEx, *PRCV_REPORT_STRUCTEx;
  95. //////////////////////////////////////////////////////////////////////////////////
  96. //补充数据头
  97. //数据头 m_dwHeadTag == EKE_HEAD_TAG 
  98. #define EKE_HEAD_TAG 0xffffffff
  99. typedef struct tagRCV_EKE_HEADEx
  100. {
  101. DWORD m_dwHeadTag; // = EKE_HEAD_TAG
  102. WORD m_wMarket; // 市场类型
  103. char m_szLabel[STKLABEL_LEN]; // 股票代码
  104. }RCV_EKE_HEADEx,*PRCV_EKE_HEADEx;
  105. //补充日线数据
  106. typedef union tagRCV_HISTORY_STRUCTEx
  107. {
  108. struct
  109. {
  110. time_t m_time; //UCT
  111. int m_fOpen; //开盘
  112. int m_fHigh; //最高
  113. int m_fLow; //最低
  114. int m_fClose; //收盘
  115. int m_fVolume; //量
  116. int m_fAmount; //额
  117. int m_fBS;
  118. int m_fME;
  119. int m_fCG;
  120. // WORD m_wAdvance; //涨数,仅大盘有效
  121. // WORD m_wDecline; //跌数,仅大盘有效
  122. };
  123. RCV_EKE_HEADEx m_head;
  124. }RCV_HISTORY_STRUCTEx,*PRCV_HISTORY_STRUCTEx;
  125. //补充分时线数据
  126. typedef union tagRCV_MINUTE_STRUCTEx
  127. {
  128. struct{
  129. time_t m_time; // UCT
  130. float m_fPrice;
  131. float m_fVolume;
  132. float m_fAmount;
  133. };
  134. RCV_EKE_HEADEx m_head; 
  135. }RCV_MINUTE_STRUCTEx,*PRCV_MINUTE_STRUCTEx;
  136. //补充除权数据
  137. typedef union tagRCV_POWER_STRUCTEx
  138. {
  139. struct
  140. {
  141. time_t m_time; // UCT
  142. float m_fGive; // 每股送
  143. float m_fPei; // 每股配
  144. float m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
  145. float m_fProfit; // 每股红利
  146. };
  147. RCV_EKE_HEADEx m_head;
  148. }RCV_POWER_STRUCTEx,*PRCV_POWER_STRUCTEx;
  149. typedef struct tagRCV_SHAGZ_STRUCTEx
  150. {
  151. WORD m_wMarket; // 市场类型
  152. char m_szLabel[STKLABEL_LEN]; // 股票代码
  153. DWORD m_StartDate; //开始计算利息的日期 YYMMDD format
  154. double m_fLiXi100RMB; //票面100员的
  155. DWORD m_DayNum;
  156. float m_fPrice;
  157. }RCV_SHAGZ,*PRCV_SHAGZ;
  158. //////////////////////////////////////////////////////////////////////////////////
  159. // 文件类型数据包头
  160. //  注一:
  161. // m_wDataType == FILE_BASE_EX
  162. // m_dwAttrib = 股票证券市场,m_szFileName仅包含文件名
  163. // m_FileTime = 基本面资料文件创建日期
  164. //  m_wDataType == FILE_NEWS_EX
  165. // m_dwAttrib = 消息来源,m_szFileName 包含目录的文件名,目录名为消息来源
  166. // m_dwSerialNo = 序列号
  167. // 如:  "上交所消息\0501Z012.TXT","新兰德\XLD0001.TXT"
  168. //  m_wDataType == FILE_HTML_EX
  169. // m_dwAttrib 保留, m_szFileName为URL
  170. // m_wDataType == FILE_SOFTWARE_EX
  171. // m_dwAttrib 分析软件类型, 用于初步判断
  172. // m_szFileName 分析软件 ID 特征字符串 + '\' + 文件名
  173. // 如 "TongShi\TS\RECEIVE\RECEIVE.EXE",
  174. // ID 特征字符串为 "TongShi", "TS\RECEIVE\RECEIVE.EXE" 为文件名
  175. // 特征字符串 和 文件名及其含义由分析软件商定义
  176. //  注二:
  177. // 数据文件循环播出,每个文件有唯一的序列号,以避免重复接收
  178. typedef struct tagRCV_FILE_HEADEx
  179. {
  180. DWORD m_dwAttrib; // 文件子类型
  181. DWORD m_dwLen; // 文件长度
  182. union 
  183. {
  184. DWORD m_dwSerialNo; // 序列号,对股评
  185. time_t m_FileTime; // 文件创建时间
  186. };
  187. char m_szFileName[MAX_PATH]; // 文件名 or URL
  188. } RCV_FILE_HEADEx,*PRCV_FILE_HEADEx;
  189. //////////////////////////////////////////////////////////////////////////////////
  190. //  数据通知消息
  191. //查询方式通知消息
  192. // wParam = MsgPara_StkData 有股票数据
  193. // wParam = MsgPara_File 有文件数据文件
  194. //直接数据引用通知消息
  195. // wParam = RCV_WPARAM;
  196. //  lParam 指向 RCV_DATA结构;
  197. // 返回 1 已经处理, 0 未处理或不能处理,目前该返回值被忽略
  198. // 注一:
  199. //   记录数表示行情数据和补充数据(包括 Header)的数据包数,对文件类型数据, = 1
  200. // 注二:
  201. //   若 m_bDISK = FALSE, m_pData 为数据缓冲区指针
  202. //  ******** 数据共享,不能修改数据 **********
  203. //  m_bDISK = TRUE,  m_pData 为该文件的存盘文件名,一般情况只有
  204. //  升级软件等大文件用存盘方式
  205. typedef struct tagRCV_DATA
  206. {
  207. int m_wDataType; // 文件类型
  208. int m_nPacketNum; // 记录数,参见注一
  209. RCV_FILE_HEADEx m_File; // 文件接口
  210. BOOL m_bDISK; // 文件是否已存盘的文件
  211. union
  212. {
  213. RCV_REPORT_STRUCTEx  * m_pReport;
  214. RCV_HISTORY_STRUCTEx * m_pDay;
  215. RCV_MINUTE_STRUCTEx  * m_pMinute;
  216. RCV_POWER_STRUCTEx  * m_pPower;
  217. void  * m_pData; // 参见注二
  218. };
  219. } RCV_DATA,*PRCV_DATA;
  220. /* 消息处理程序 DEMO
  221. LONG OnStkDataOK(UINT wParam,LONG lParam)
  222. {
  223. union tagSrcStock DOS_StkBuf;
  224. RCV_REPORT_STRUCTEx NEW_StkBuf;
  225. PBYTE pDataBuf;
  226. RCV_DATA Header;
  227. RCV_DATA * pHeader;
  228. DWORD dwFileLen;
  229. int ok;
  230. pHeader = (RCV_DATA *)lParam;
  231. switch( wParam )
  232. {
  233. case RCV_REPORT: // 共享数据引用方式,股票行情
  234. for(i=0; i<pHeader->m_nPacketNum; i++)
  235. {
  236. pHeader->m_pReport[i] ...
  237. // 数据处理
  238. }
  239. break;
  240. case RCV_FILEDATA: // 共享数据引用方式,文件
  241. switch(pHeader->m_wDataType)
  242. {
  243. case FILE_HISTORY_EX: // 补日线数据
  244. break;
  245. case FILE_MINUTE_EX: // 补分钟线数据
  246. break;
  247. case FILE_POWER_EX: // 补充除权数据
  248. break;
  249. case FILE_BASE_EX: // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
  250. break;
  251. case FILE_NEWS_EX: // 新闻类,其类型由m_szFileName中子目录名来定
  252. break;
  253. case FILE_HTML_EX: // HTML文件,m_szFileName为URL
  254. break;
  255. case FILE_SOFTWARE_EX: // 升级软件
  256. break;
  257. }
  258. break;
  259. default:
  260. return 0; // unknown data
  261. }
  262. return 1;
  263. }
  264. */
  265. //////////////////////////////////////////////////////////////////////////////////
  266. //APIs
  267. #ifdef __cplusplus
  268. extern "C"{
  269. #endif
  270. //////////////////////////////////////////////////////////////////////////////////
  271. // 注册函数
  272. // 股票初始化
  273. // 入口参数:
  274. // hWnd 处理消息的窗口句柄
  275. // Msg 用户自定义消息
  276. // nWorkMode 接口工作方式, 应等于 RCV_WORK_SENDMSG
  277. // 返回参数:
  278. //  1 成功
  279. // -1 失败
  280. int WINAPI Stock_Init(HWND hWnd,UINT Msg,int nWorkMode);
  281. // 退出,停止发送消息
  282. // 入口参数:
  283. // hWnd 处理消息的窗口句柄,同 Stock_Init 的调用入口参数
  284. // 返回参数:
  285. //  1 成功
  286. // -1 失败
  287. int WINAPI  Stock_Quit(HWND hWnd);
  288. //////////////////////////////////////////////////////////////////////////////////
  289. // 行情接口       
  290.       
  291. // 取已接收到的股票总数
  292. int WINAPI  GetTotalNumber();
  293. // 由序号取股票数据(扩展)
  294. // 入口参数:
  295. // nNo 序号
  296. // pBuf 存放股票数据的缓冲区
  297. // 返回参数:
  298. //     NoStockData 无股票数据
  299. // 注:
  300. // 该函数提供股票数据的主要数据;分析软件刚运行时,可以快速建立数据框架
  301. int WINAPI  GetStockByNoEx(int nNo,RCV_REPORT_STRUCTEx * pBuf);
  302. // 由股号取股票数据(扩展)
  303. // 入口参数:
  304. // pszStockCode股票代号
  305. // nMarket 证券市场
  306. // pBuf 存放股票数据的缓冲区
  307. // 返回参数:
  308. //     NoStockData 无股票数据
  309. // 注:
  310. // 该函数提供股票数据的主要数据;分析软件刚运行时,可以快速建立数据框架
  311. int WINAPI  GetStockByCodeEx(char * pszStockCode,int nMarket,RCV_REPORT_STRUCTEx * pBuf);
  312. // 激活接收程序,进行设置
  313. // 入口参数:
  314. // bShowWindow TRUE 显示窗口,进行设置
  315. // FALSE 隐含窗口
  316. // 返回参数:
  317. //  1 成功
  318. // -1 失败
  319. int WINAPI  SetupReceiver(BOOL bShowWindow);
  320. // 取得股票驱动信息
  321. // 入口参数:
  322. // nInfo 索引
  323. // pBuf 缓冲区
  324. // 出口参数:
  325. // nInfo == RI_IDSTRING, 返回特征字符串长度, pBuf 为特征字符串
  326. // 如: "TongShi_StockDrv_1.00"
  327. // nInfo == RI_IDCODE, 返回信息卡 ID 号, pBuf 为字符串形式的 ID 号
  328. // 如: 0x78001234   "78001234"
  329. // nInfo == RI_VERSION, 返回信息卡版本号, pBuf 为字符串版本
  330. // 如:  1.00   "1.00"
  331. // nInfo == RI_ERRRATE, 取信道误码,
  332. // nInfo == RI_STKNUM, 取上市股票总家数
  333. DWORD WINAPI  GetStockDrvInfo(int nInfo,void * pBuf);
  334. #ifdef __cplusplus
  335. }
  336. #endif
  337. #endif // __STOCKDRV_H__