头文件三

  • 一.class CThostFtdcMdSpi类---被动函数结构
    • 1.1回调函数都是以On开头。
    • 1.2结构体指针
    • 1.3参数
  • 二、class MD_API_EXPORT CThostFtdcMdApi 类---主动函数结构
    • 2.1 MdApi对象创建
    • 2.2 对象指针的注册
    • 2.3 参数
  • 三、源代码

该文件包含2个类

一.class CThostFtdcMdSpi类—被动函数结构

MdSpi类中包含了行情功能相关的回调函数接口,什么是回调函数呢?简单来说就是由于柜台端向用户端发送信息后才会被系统自动调用的函数(非用户主动调用)

1.1回调函数都是以On开头。

1.2结构体指针

柜台端向用户端发送的信息经过API处理后,传给我们的是一个结构体的指针,如CSecurityFtdcRspUserLoginField *pRspUserLogin,这里的pRspUserLogin就是一个C++的指针类型,其指向的结构体对象是CSecurityFtdcRspUserLoginField结构的,而该结构的定义可以在ApiStruct.h中找到。

1.3参数

不同的回调函数,传过来的参数数量是不同的,OnRspUserLogin中传入的参数包括两个结构体指针,以及一个整数(代表该响应对应的用户请求号)和一个布尔值(该响应是否是这个请求号的最后一次响应)。
2.class MD_API_EXPORT CThostFtdcMdApi

二、class MD_API_EXPORT CThostFtdcMdApi 类—主动函数结构

MdApi类中包含了行情功能相关的主动函数结构,顾名思义,主动函数指的是由用户负责进行调用的函数,用于向柜台端发送各种请求和指令

2.1 MdApi对象创建

MdApi对象不应该直接创建,而应该通过调用类的静态方法CreateFtdcMdApi创建,传入参数为你希望保存API的通讯用的.con文件的目录(可以选择留空,则.con文件会被放在程序所在的文件夹下)。

2.2 对象指针的注册

创建MdSpi对象后,需要使用MdApi对象的RegisterSpi方法将该MdSpi对象的指针注册到MdApi上,也就是告诉MdApi从柜台端收到数据后应该通过哪个对象的回调函数推送给用户。从API的这个设计上作者猜测MdApi中后包含了和柜台端通讯、接收和发送数据包的功能,而MdSpi仅仅是用来实现一个通过回调函数向用户程序推送数据的接口。

2.3 参数

绝大部分主动函数(以Req开头)在调用时都会用到一个整数类型的参数nRequestID,该参数在整个API的调用中应当保持递增唯一性,从而在收到回调函数推送的数据时,可以知道是由哪次操作引起的。

三、源代码

/
///@system 新一代交易所系统
///@company 上海期货信息技术有限公司
///@file ThostFtdcMdApi.h
///@brief 定义了客户端接口
///@history
///20060106 赵鸿昊     创建该文件
/#if !defined(THOST_FTDCMDAPI_H)
#define THOST_FTDCMDAPI_H#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "ThostFtdcUserApiStruct.h"#if defined(ISLIB) && defined(WIN32)
#ifdef LIB_MD_API_EXPORT
#define MD_API_EXPORT __declspec(dllexport)
#else
#define MD_API_EXPORT __declspec(dllimport)
#endif
#else
#define MD_API_EXPORT
#endifclass CThostFtdcMdSpi
{public:///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。virtual void OnFrontConnected(){};///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。///@param nReason 错误原因///        0x1001 网络读失败///        0x1002 网络写失败///        0x2001 接收心跳超时///        0x2002 发送心跳失败///        0x2003 收到错误报文virtual void OnFrontDisconnected(int nReason){};///心跳超时警告。当长时间未收到报文时,该方法被调用。///@param nTimeLapse 距离上次接收报文的时间virtual void OnHeartBeatWarning(int nTimeLapse){};///登录请求响应virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///登出请求响应virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///请求查询组播合约响应virtual void OnRspQryMulticastInstrument(CThostFtdcMulticastInstrumentField *pMulticastInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///错误应答virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///订阅行情应答virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///取消订阅行情应答virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///订阅询价应答virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///取消订阅询价应答virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};///深度行情通知virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {};///询价通知virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {};
};class MD_API_EXPORT CThostFtdcMdApi
{public:///创建MdApi///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录///@return 创建出的UserApi///modify for udp marketdatastatic CThostFtdcMdApi *CreateFtdcMdApi(const char *pszFlowPath = "", const bool bIsUsingUdp=false, const bool bIsMulticast=false);///获取API的版本信息///@retrun 获取到的版本号static const char *GetApiVersion();///删除接口对象本身///@remark 不再使用本接口对象时,调用该函数删除接口对象virtual void Release() = 0;///初始化///@remark 初始化运行环境,只有调用后,接口才开始工作virtual void Init() = 0;///等待接口线程结束运行///@return 线程退出代码virtual int Join() = 0;///获取当前交易日///@retrun 获取到的交易日///@remark 只有登录成功后,才能得到正确的交易日virtual const char *GetTradingDay() = 0;///注册前置机网络地址///@param pszFrontAddress:前置机网络地址。///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:17001”。 ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”17001”代表服务器端口号。virtual void RegisterFront(char *pszFrontAddress) = 0;///注册名字服务器网络地址///@param pszNsAddress:名字服务器网络地址。///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:12001”。 ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。///@remark RegisterNameServer优先于RegisterFrontvirtual void RegisterNameServer(char *pszNsAddress) = 0;///注册名字服务器用户信息///@param pFensUserInfo:用户信息。virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0;///注册回调接口///@param pSpi 派生自回调接口类的实例virtual void RegisterSpi(CThostFtdcMdSpi *pSpi) = 0;///订阅行情。///@param ppInstrumentID 合约ID  ///@param nCount 要订阅/退订行情的合约个数///@remark virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) = 0;///退订行情。///@param ppInstrumentID 合约ID  ///@param nCount 要订阅/退订行情的合约个数///@remark virtual int UnSubscribeMarketData(char *ppInstrumentID[], int nCount) = 0;///订阅询价。///@param ppInstrumentID 合约ID  ///@param nCount 要订阅/退订行情的合约个数///@remark virtual int SubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0;///退订询价。///@param ppInstrumentID 合约ID  ///@param nCount 要订阅/退订行情的合约个数///@remark virtual int UnSubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0;///用户登录请求virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0;///登出请求virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0;///请求查询组播合约virtual int ReqQryMulticastInstrument(CThostFtdcQryMulticastInstrumentField *pQryMulticastInstrument, int nRequestID) = 0;
protected:~CThostFtdcMdApi(){};
};#endif

上期所API头文件三、ThostFtdcMdApi.h---行情相关组件的定义(源代码6.3.19版)相关推荐

  1. 上期所API头文件一、ThostFtdcUserApiStruct.h---API结构体的定义及工作流程(源代码6.3.19版)

    结构体的定义及工作流程 一.API工作流程 1.1.MdApi 1.2.TraderApi 二. ThostFtdcUserApiStruct结构体的定义 三.源代码 一.API工作流程 1.1.Md ...

  2. 上期所API头文件四、ThostFtdcTraderApi.h--交易相关组件的定义(源代码6.3.19版)

    交易相关组件的定义 一.spi 1.1.以On...开头 1.2.以OnRsp...开头 1.3.以OnRtn...开头 1.4.以OnErrRtn...开头 二.Api 2.1.Create... ...

  3. 上期所API头文件二、ThostFtdcUserApiDataType.h---API常量及类型的定义(源代码6.3.19版)

    API常量及类型的定义 一.常量的定义 二.类型定义 三.源代码 上期所官网上工作日白天可以下载 该文件中包含了对API中用到的常量的定义,以及类型的定义 一.常量的定义 如以下代码定义了一个产品类型 ...

  4. 重要头文件: cc430x613x.h

    2019独角兽企业重金招聘Python工程师标准>>> 重要头文件: cc430x613x.h 来自:http://www.inventortown.com/includes/cc4 ...

  5. C11的对齐特性是在新的头文件中stdalign.h声明的

    void*aligned_alloc(size_t algn,size_t size); 分配size字节以algn字节对齐的内存,并返回指向所分配内存的指针. C11的对齐特性是在新的头文件中< ...

  6. C++ 头文件cstring,string.h,string 三者的区别

    一般一个C++的老的带".h"扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带".h"扩展名的相对应,区别除了后者的好多改进之外,还有 ...

  7. 【C++】头文件 bits/stdc++.h 是啥?

    原文地址: [C++]头文件 bits/stdc++.h 是啥? 欢迎访问我的博客:http://blog.duhbb.com/ 嘿嘿, 以后写 leetcode 的话, 本地直接就引用这个文件, 还 ...

  8. c语言cstdio头文件,C++头文件----cstdio(stdio.h)

    头文件(stdio.h) 执行输入/输出操作的C++库 输入与输出操作在C++中也可以通过使用C标准输入输出库(cstdio,在C语言中为stdio.h)实现.该库使用所谓的"流" ...

  9. C++预编译头文件 bits/stdc++.h

    有时候会看到别人包含这样的头文件: #include "bits/stdc++.h" 这个头文件中有很多预先包含的头文件,内容如下: // C++ includes used fo ...

最新文章

  1. 炫彩流光按钮 html+css
  2. Win10安装Vue-cli
  3. linux 权限 mask,Linux mask有效权限详解
  4. Redis(七)Redis的噩梦:阻塞
  5. Ocelot中文文档-微服务ServiceFabric
  6. python 函数参数_python之函数(二)——函数参数详解
  7. framework 2.0 新增的一个string.split()方法重载
  8. mysql配置命令_MySQL基本配置命令总结
  9. Exchange Server 2013系统要求
  10. bat文件指定jdk路径_配置点击就能运行Python程序的bat批处理脚本(Windows)
  11. redis用zset做延时消息
  12. layer关闭当前窗口并刷新父窗口
  13. 程序和算法之间,主要有什么关系?
  14. SpringBoot项目深度优化和Jvm调优
  15. 微信小程序报错“对应的服务器证书无效”
  16. 使用IDEA写程序时,运行忽然报错,提示:在类*** 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)
  17. HTML中spry菜单栏,DreamweaverCS3中用“spry菜单栏”制作纵向导航菜单.docx
  18. 视频图像传输与显示(4)——数字电视信号标准ITU-R BT.601和ITU-R BT.656简介
  19. Photoshop脚本 蒙尘与划痕滤镜的使用
  20. React——UI框架 Antd 、Element

热门文章

  1. 华为笔记本锐龙版和linux,华为 MateBook 13 锐龙版 详细体验(对比小新Pro)
  2. NOI openjudge 6043:哆啦A梦的时光机(双向宽搜)
  3. Android的隐式跳转
  4. 超详细Eclipse配置Tomcat配置教程
  5. Tomcat:第二章:Tomcat日志文件分析
  6. HDMI接口的计算机外接DP接口的显示器
  7. 计算机组装时应该注意的硬件参数,深度解析组装一台计算机需要注意的兼容性问题...
  8. 学习tensorflow日记——跳过NVIDIA注册环节下载cuDNN
  9. pve搭建文件服务器,PVE安装NFS实现存储共享
  10. zip解压缩,亲测有效!!!