①、
将..\protobuf-3.5.1\cmake\CMakeLists.txt中
“cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" ON”
改为
cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" OFF
②、
在“..\protobuf-3.5.1\cmake\”文件夹下新建文件夹“build”
cd 进入“..\protobuf-3.5.1\cmake\build\”文件夹
执行命令“cd ..”,等待文件生成
③、(此步为观察操作)
此时生成的工程默认“运行库”就是“多线程调试 DLL (/MDd)”,可选中libprotobuf、libprotobuf-lite、libprotoc、protoc四个项目,右键->属性,打开属性页。“C/C++” -> "代码生成" --> "运行库",观察是否为“多线程调试 DLL(/MDd)”
④、
选择 “64位" “debug”
右键“解决方案”,点击“重新生成解决方案”,将文件夹“..\Src\protobuf-3.5.1\cmake\build\Debug\”新生成的“libprotobufd.lib” ,复制到文件夹“..\Bin\Windows-x64\Debug\MD\” 下,并改名为“libprotobuf.lib”
⑤、
在“..\Src\protobuf-3.5.1\cmake\build\Debug\”目录下新建文件“Common.proto”,复制以下内容到文件中:
syntax = "proto2";
package Common;
option java_package = "com.futu.openapi.pb";
option go_package = "github.com/futuopen/ftapi4go/pb/common";
//返回结果
enum RetType
{
RetType_Succeed = 0; //成功
RetType_Failed = -1; //失败
RetType_TimeOut = -100; //超时
RetType_DisConnect = -200; //连接断开
RetType_Unknown = -400; //未知结果
RetType_Invalid = -500; //包内容非法
}
//包加密算法
enum PacketEncAlgo
{
PacketEncAlgo_FTAES_ECB = 0; //富途修改过的AES的ECB加密模式
PacketEncAlgo_None = -1; //不加密
PacketEncAlgo_AES_ECB = 1; //标准的AES的ECB加密模式
PacketEncAlgo_AES_CBC = 2; //标准的AES的CBC加密模式
}
//包的唯一标识,用于回放攻击的识别和保护
message PacketID
{
required uint64 connID = 1; //当前TCP连接的连接ID,一条连接的唯一标识,InitConnect协议会返回
required uint32 serialNo = 2; //自增序列号
}
//协议格式,请求协议在请求头中指定,推送协议在Init时指定
enum ProtoFmt
{
ProtoFmt_Protobuf = 0; //Google Protobuf格式
ProtoFmt_Json = 1; //Json格式
}
//用户注册归属地
enum UserAttribution
{
UserAttribution_Unknown = 0; //
UserAttribution_NN = 1; //大陆
UserAttribution_MM = 2; //MooMoo
UserAttribution_SG = 3; //新加坡
UserAttribution_AU = 4; //澳洲
UserAttribution_JP = 5; //日本
UserAttribution_HK = 6; //香港
}
enum ProgramStatusType
{
ProgramStatusType_None = 0;
ProgramStatusType_Loaded = 1; //已完成类似加载配置,启动服务器等操作,服务器启动之前的状态无需返回
ProgramStatusType_Loging = 2; //登录中
ProgramStatusType_NeedPicVerifyCode = 3; //需要图形验证码
ProgramStatusType_NeedPhoneVerifyCode = 4; //需要手机验证码
ProgramStatusType_LoginFailed = 5; //登录失败,详细原因在描述返回
ProgramStatusType_ForceUpdate = 6; //客户端版本过低
ProgramStatusType_NessaryDataPreparing = 7; //正在拉取类似免责声明等一些必要信息
ProgramStatusType_NessaryDataMissing = 8; //缺少必要信息
ProgramStatusType_UnAgreeDisclaimer = 9; //未同意免责声明
ProgramStatusType_Ready = 10; //可以接收业务协议收发,正常可用状态
//OpenD登录后被强制退出登录,会导致连接全部断开,需要重连后才能得到以下该状态(并且需要在ui模式下)
ProgramStatusType_ForceLogout = 11; //被强制退出登录,例如修改了登录密码,中途打开设备锁等,详细原因在描述返回
ProgramStatusType_DisclaimerPullFailed = 12; //拉取免责声明标志失败
}
message ProgramStatus
{
required ProgramStatusType type = 1; //当前状态
optional string strExtDesc = 2; // 额外描述
}
⑥、
cd 到 “....\Src\protobuf-3.5.1\cmake\build\Debug\”文件夹下,
cmd执行命令行“protoc --cpp_out=. .\Common.proto”
⑦、
将⑥中生成的文件“Common.pb.cc” 、 “Common.pb.h” 复制到 "../Include/Proto/"下面
⑧、
打开工程“\Src\FTAPI.sln”,选择 “64位" “debug”
右键“解决方案”,“属性”,“常规”,“平台工具集”,“Visual Studio 2019(v142)”
右键工程,“重新生成”,默认生成文件“..\Bin\Windows-x64\Debug\MD\FTAPI.lib”
⑨
打开工程“\Sample\SimpleSample\SimpleSample.sln”,选择 “64位" “debug”
在文件“simpleSample.cpp”中加上“#include "FTAPI.h"”;
右键“解决方案”,“属性”,“连接器”,“输入”,“附加依赖项”,中添加“FTAPIChannel.lib”
重新生成解决方案