Linux最全CTP-API开发系列之十:v6,Linux运维开发者出路在哪

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

地址:https://www.swig.org/download.html

3.安装 Python 或者 Anaconda

Windows 系统下封装

1.解压 v6.7.0_traderapi_20230209.zip 文件(我这里是使用的x64版本)

cd v6.7.2_traderapi_20230913\v6.7.2_20230913_winApi\traderapi\20230913_traderapi64_se_windows

在这里插入图片描述
2.新建 thosttraderapi.i 文件,内容如下:

%module(directors="1") thosttraderapi                                                                                                                                                                                                              
%{ 
#include "ThostFtdcTraderApi.h"
#include <codecvt>
#include <locale>
#include <vector>
#include <string>
using namespace std;
#ifdef \_MSC\_VER
const static locale g\_loc("zh-CN");
#else 
const static locale g\_loc("zh\_CN.GB18030");
#endif
%}
 
%typemap(out) char[ANY], char[] {
    const std::string &gb2312($1);
    std::vector<wchar\_t> wstr(gb2312.size());
    wchar\_t\* wstrEnd = nullptr;
    const char\* gbEnd = nullptr;
    mbstate\_t state = {}; 
    int res = use_facet<codecvt<wchar\_t, char, mbstate\_t> >
        (g_loc).in(state,
            gb2312.data(), gb2312.data() + gb2312.size(), gbEnd,
            wstr.data(), wstr.data() + wstr.size(), wstrEnd);
 
    if (codecvt_base::ok == res)
    {
        wstring_convert<codecvt_utf8<wchar\_t>> cutf8;
        std::string result = cutf8.to\_bytes(wstring(wstr.data(), wstrEnd));       
        resultobj = SWIG\_FromCharPtrAndSize(result.c\_str(), result.size()); 
    }
    else
    {
        std::string result;
        resultobj = SWIG\_FromCharPtrAndSize(result.c\_str(), result.size()); 
    }
}
%feature("director") CThostFtdcTraderSpi; 
%ignore THOST_FTDC_VTC_BankBankToFuture;
%ignore THOST_FTDC_VTC_BankFutureToBank;
%ignore THOST_FTDC_VTC_FutureBankToFuture;
%ignore THOST_FTDC_VTC_FutureFutureToBank;
%ignore THOST_FTDC_FTC_BankLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BrokerLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BankLaunchBrokerToBank;
%ignore THOST_FTDC_FTC_BrokerLaunchBrokerToBank;  
%feature("director") CThostFtdcTraderSpi; 
%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h" 
%include "ThostFtdcTraderApi.h

3.新建 thostmduserapi.i 文件,内容如下:

%module(directors="1") thostmduserapi
%{ 
#include "ThostFtdcMdApi.h"
#include <codecvt>
#include <locale>
#include <vector>
#include <string>
using namespace std;
#ifdef \_MSC\_VER
const static locale g\_loc("zh-CN");
#else 
const static locale g\_loc("zh\_CN.GB18030");
#endif
%}
 
%typemap(out) char[ANY], char[] {
    const std::string &gb2312($1);
    std::vector<wchar\_t> wstr(gb2312.size());
    wchar\_t\* wstrEnd = nullptr;
    const char\* gbEnd = nullptr;
    mbstate\_t state = {};
    int res = use_facet<codecvt<wchar\_t, char, mbstate\_t> >
        (g_loc).in(state,
            gb2312.data(), gb2312.data() + gb2312.size(), gbEnd,
            wstr.data(), wstr.data() + wstr.size(), wstrEnd);
 
    if (codecvt_base::ok == res)
    {
        wstring_convert<codecvt_utf8<wchar\_t>> cutf8;
        std::string result = cutf8.to\_bytes(wstring(wstr.data(), wstrEnd));       
        resultobj = SWIG\_FromCharPtrAndSize(result.c\_str(), result.size()); 
    }
    else
    {
        std::string result;
        resultobj = SWIG\_FromCharPtrAndSize(result.c\_str(), result.size()); 
    }
}

%typemap(in) char \*[] {
  /\* Check if is a list \*/
  if (PyList\_Check($input)) {
    int size = PyList\_Size($input);
    int i = 0;
    $1 = (char \*\*) malloc((size+1)\*sizeof(char \*));
    for (i = 0; i < size; i++) {
      PyObject \*o = PyList\_GetItem($input, i);
      if (PyString\_Check(o)) {
        $1[i] = PyString\_AsString(PyList\_GetItem($input, i));
      } else {
        free($1);
        PyErr\_SetString(PyExc_TypeError, "list must contain strings");
        SWIG_fail;
      }
    }
    $1[i] = 0;
  } else {
    PyErr\_SetString(PyExc_TypeError, "not a list");
    SWIG_fail;
  }
}

// This cleans up the char \*\* array we malloc'd before the function call
%typemap(freearg) char \*\* {
  free((char \*) $1);
}
%feature("director") CThostFtdcMdSpi;
%ignore THOST_FTDC_VTC_BankBankToFuture;
%ignore THOST_FTDC_VTC_BankFutureToBank;
%ignore THOST_FTDC_VTC_FutureBankToFuture;
%ignore THOST_FTDC_VTC_FutureFutureToBank;
%ignore THOST_FTDC_FTC_BankLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BrokerLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BankLaunchBrokerToBank;
%ignore THOST_FTDC_FTC_BrokerLaunchBrokerToBank;

%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h"
%include "ThostFtdcMdApi.h"

4.cmd 进入该路径,分别运行以下命令:

swig -threads -py3 -c++ -python thosttraderapi.i
swig -threads -py3 -c++ -python thostmduserapi.i

5.此时会新增以下文件:
在这里插入图片描述
6.新建两个vs动态库项目 _thosttraderapi 和 _thostmduserapi(项目最后会打包提供),每个项目添加如下文件,我本地安装的是Visual Studio 2022:
在这里插入图片描述
7.两个项目都需要将python安装路径的头文件和lib库文件路径添加上,我本地安装的是Anaconda3:

附加包含目录:D:\software\Anaconda3\include;
附加库目录:D:\software\Anaconda3\libs;
附加项(_thostmduserapi项目):python37.lib;thostmduserapi_se.lib;
附加项(_thosttraderapi项目):python37.lib;thosttraderapi_se.lib;

8.编译两个项目,会生成 _thosttraderapi.dll 和 _thostmduserapi.dll 两个动态库,分别复制一份,将.dll改成.pyd

9.以下6个文件,就是我们最终封装好的Python版CTP-API(最后会打包提供)
在这里插入图片描述

Linux 系统下封装

1.解压 v6.7.0_traderapi_20230209.zip 文件,进入 v6.7.0_20230209_api_traderapi_se_linux64 目录
在这里插入图片描述

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值