XTP.rs 来源于:

https://github.com/dovahcrow/xtp-rs

一、从RUST ->C++:

当Rust需要把指令传入XTP中时,以register_spi为例

1、rust中.rs文件中

let mut api = QuoteApi::new(1, &args.path, XTPLogLevel::Trace);info!("XTP Version: {:?}", api.get_api_version());
info!("Trading Day: {:?}", api.get_trading_day());api.register_spi(MySpi);

2、quote_api.rs

pub fn register_spi<T: QuoteSpi>(&mut self, spi: T) {let trait_object_box: Box<Box<dyn QuoteSpi>> = Box::new(Box::new(spi));let trait_object_pointer =Box::into_raw(trait_object_box) as *mut Box<dyn QuoteSpi> as *mut c_void;let quote_spi_stub = unsafe { QuoteSpiStub::new(trait_object_pointer) };let ptr = Box::into_raw(Box::new(quote_spi_stub));self.quote_spi_stub = Some(ptr);unsafe { QuoteApi_RegisterSpi(self.quote_api, ptr as *mut XTP_API_QuoteSpi) };
}

3、到 bind.rs =>

extern "C" {pub fn QuoteApi_RegisterSpi(self_: *mut XTP_API_QuoteApi, spi: *mut XTP_API_QuoteSpi);
}

4、bridge.cpp

extern "C" void QuoteApi_RegisterSpi(XTP::API::QuoteApi *self, XTP::API::QuoteSpi *spi)
{auto s = static_cast<XTP::API::QuoteApi *>(self);return s->RegisterSpi(spi);
}

二、从C++ > RUST:

当 XTP有响应时,

以OnDepthMarketData为例:

1、从头文件xtp_quote_api.h中QuoteSpi类

2、到 bridge.cpp中

实例QuoteSpiStub-> QuoteSpiStub::OnDepthMarketData ->

void QuoteSpiStub::OnDepthMarketData(XTPMD *market_data, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count)
{return QuoteSpiStub_Rust_OnDepthMarketData(this->rust_object, market_data, bid1_qty, bid1_count, max_bid1_count, ask1_qty, ask1_count, max_ask1_count);
}

3、到 Quotespi.rs =>

#[no_mangle]
pub unsafe extern "C" fn QuoteSpiStub_Rust_OnDepthMarketData(spi: *mut c_void,market_data: *const XTPMD,bid1_qty: *const i64,bid1_count: i32,max_bid1_count: i32,ask1_qty: *const i64,ask1_count: i32,max_ask1_count: i32,
) {let spi = unwrap_quote_spi(spi);let market_data = RXTPMD::from_raw(&*market_data);let bid1_qty = from_raw_parts(bid1_qty, bid1_count as usize);let ask1_qty = from_raw_parts(ask1_qty, ask1_count as usize);spi.on_depth_market_data(market_data,bid1_qty,max_bid1_count,ask1_qty,max_ask1_count,);
}

=>trait QuoteSpi =>分发给实现trait的对象

XTP: 从XTP看Rust与C++接口FFI通信相关推荐

  1. 笔记本计算机接口类型,小白入门必看!笔记本电脑常见接口都在这了

    原标题:小白入门必看!笔记本电脑常见接口都在这了 对很多没接触过或者刚接触笔记本电脑的朋友来说,笔记本电脑的接口是个比较令人头疼的问题,一是接口种类繁多,二是很多接口长得比较像,不易分辨,下面就给大家 ...

  2. 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

    在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...

  3. RS232接口转USB接口的通信方法

    2006-05-03 21:44:07 组图]RS232接口转USB接口的通信方法 RS232接口转USB接口的通信方法 USB作为一种新的PC机互连协议,使外设到计算机的连接更加高效.便利.这种接口 ...

  4. 如何与程控仪器通过GPIB接口进行通信

    在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...

  5. 股票交易接口除了通信达还有哪些

    股票交易接口除了通信达还有哪些,还有东财量化接口.雪球量化接口.米筐量化接口.天勤量化接口等等这些.

  6. 吃灰树莓派第二篇|不设置主从机,看ROS2如何进行多机通信

    小鱼吃灰树莓派第二篇|不设置主从机,看ROS2如何进行多机通信 吃灰小鱼 一.ROS2多机通信实践 1.1 让树莓派和电脑连接在同一个局域网 1.2 使用ros2的多播(multicast)指令测试 ...

  7. java对gpib接口控制_【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

    在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...

  8. 计算机接口与通信教学大纲,接口与通信教学大纲.doc

    接口与通信教学大纲 <接口与通信>I课程教学大纲 Interface & Communications 课程编号:241018 适用专业:计算机科学与技术 学时数:64(其中, ...

  9. 半导体玻璃管标签工业级低频RFID读写器阅读器CK-S640-AP60E开发手册之硬件接口与通信

    半导体玻璃管标签工业级低频RFID读写器阅读器CK-S640-AP60E开发手册之硬件接口与通信 半导体玻璃管标签工业级低频RFID读写器阅读器CK-S640-AP60E符合世界SEMI标准.是专门面 ...

  10. Rust linux 系统接口使用

    前言 官方已经引入 Linux api 到 Rust 中, 但是需要在代码中注明为不安全代码进行使用,尤其是mmap的使用,可以先试用看看情况 官方api 手册地址 https://docs.rs/n ...

最新文章

  1. Contiki Process概述
  2. redisson MultiLock原理及分布式锁的应用
  3. 搭建 LEGO EV3 的 PyCharm Python 开发环境
  4. 【算法设计与分析】Dijskra算法代码:Java版
  5. Python基础之:Python中的异常和错误
  6. Linux中拷贝和移动文件
  7. Docker 入门(4)镜像与容器
  8. 工程师如何培养美学思维
  9. pyqt5 发送键盘信号_Python教程 | Pyqt5实战教程之操作交互处理,原来这么简单!...
  10. vue 方法获取返回值_Vue项目中Api的组织和返回数据处理的操作
  11. Java对数组的操作(二)—集合与数组的切换
  12. 公式推导 11-20
  13. 数控机床通信协议汇总
  14. 《打开量化投资的黑箱》
  15. 如何写一个脚本(附送一个脚本)
  16. 在开发版上用C语言写实心圆,MFC利用CPen与CBrush绘制实心圆
  17. 如何将wav文件切成多个子文件
  18. 尚硅谷的后台管理系统学习笔记【尚硅谷】【Vue】
  19. 华为苏箐被曝转投大众汽车:最狂智能车高管,因抨击特斯拉丢工作,任正非亲自签发罢免令...
  20. 【论文阅读|cryoET】Isotropic reconstruction for electrontomography with deep learning (解决缺失楔问题降噪)

热门文章

  1. 容器Docker详解
  2. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  3. Android--锁定横屏、竖屏、去标题全屏
  4. Puppet之基础篇
  5. android特殊用法(转)
  6. 打印机后台程序没有启动
  7. MySQL-快速入门(1)基本数据库、表操作语句
  8. VSCode编译Python环境搭建及发布Python应用
  9. MySQL语法一:数据定义语句
  10. Linux基础命令介绍七:网络传输与安全 wget curl rsync iptables