一、庫、配置
https://github.com/nagisa/rust_libloading
toml文件中:
[dependencies]
libloading = "0.5"
二、CTP DLL資料
http://www.sfit.com.cn/5_2_DocumentDown.htm
三、c類型struct =>翻譯轉換成rust中的struct
在ctp文件中,有ThostFtdcUserApiStruct.h文件,其中有各種CTP的數據,全部是用struct來表示。這個需要全部轉換成rust的struct.
這個文件大約有近萬行,肯定要寫一個自動轉換的程序。
這個是C++中的結構體:
struct CThostFtdcDisseminationField
{
TThostFtdcSequenceSeriesType SequenceSeries;
TThostFtdcSequenceNoType SequenceNo;
};
要轉換成rust 中的結構體:[名字和類型可以沿用原來的,只是換個方式]
struct CThostFtdcDisseminationField
{
SequenceSeries:TThostFtdcSequenceSeriesType;
SequenceNo: TThostFtdcSequenceNoType;
};
轉換代碼:
待續.....; 可以用macro_rules!?
四、代碼
extern crate libloading as lib;
//const
fn OnFrontConnected() -> lib::Result<()> {
let lib = lib::Library::new("D:\\ctp-api\\ctp\\CTP\\tradeapi\\thostmduserapi.dll")?;
unsafe {
let func: lib::Symbol<unsafe extern "C" fn() -> ()> = lib.get(b"OnFrontConnected")?;
Ok(func())
}
}
fn OnHeartBeatWarning(nTimeLapse: i32) -> lib::Result<i32> {
let lib = lib::Library::new("D:\\ctp-api\\ctp\\CTP\\tradeapi\\thostmduserapi.dll")?;
unsafe {
let func: lib::Symbol<unsafe extern "C" fn(i32) -> i32> = lib.get(b"OnHeartBeatWarning")?;
Ok(func(nTimeLapse))
}
}
fn main() {
println!("Hello, world!");
}
待續…