java,ctp
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java ctp是什么,让我们一起了解一下。
ctp是综合交易平台,是技术专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制、结算三大系统组成。JAVA接口中的CTP是由JNI实现的,通过静态方法例如CreateFtdcTraderApi方法来创建。
那么在期货交易中,由JNI实现的CTP在JAVA接口中是如何操作的?
CTP的头文件分为3个部分:
1. ThostFtdcUserApiDataType.h,api的数据类型, typedef了一大堆类型,char, char[], int, short, double。 对于大部分char型,又#define了很多字符常量。开头的枚举类型比较特殊。还有那个单引号括起来的连续字符也比较特殊。
2. ThostFtdcUserApiStruct.h, api的数据结构,用于api和spi的函数参数,数据结构的成员变量的类型全部来自上面的头文件。
3. API、SPI (Trader, Market Data)
他的实现思路是:
Java的API类跟C++中一样,只能通过静态方法例如CreateFtdcTraderApi方法来创建。
Java的API类,包含一个C++的API的实例的指针。API的每个函数,全部通过native方法。这个native方法通过这个指针调用对应的CTP API。例如:public native int ReqUserLogin(CThostFtdcReqUserLoginField pReqUserLoginField,int nRequestID);
Java中的SPI类可以用new来创建,它的构造函数会调用newNativeSpiInstance这个native方法。newNativeSpiInstance(代码最长的函数)会干这么几件事。
具体操作:实现每一个java API类的native函数。
JNIEXPORT jint JNICALL Java_ctp_CThostFtdcTraderApi_ReqQryTradingNotice(JNIEnv*env,jobject obj,jobject pQryTradingNotice,jint nRequestID){undefinedCThostFtdcTraderApi*ptrApi;jclass clazzTraderApi= env->FindClass("Lctp/CThostFtdcTraderApi;");jfieldID fidTraderApi= env->GetFieldID(clazzTraderApi, "ptrApi", "J");ptrApi= (CThostFtdcTraderApi*)env->GetLongField(obj,fidTraderApi);jclass clzparam= env->FindClass("Lctp/apistruct/CThostFtdcQryTradingNoticeField;");CThostFtdcQryTradingNoticeField QryTradingNotice= { 0};{undefinedjfieldID fid= env->GetFieldID(clzparam, "BrokerID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.BrokerID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}{undefinedjfieldID fid= env->GetFieldID(clzparam, "InvestorID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.InvestorID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}{undefinedjfieldID fid= env->GetFieldID(clzparam, "InvestUnitID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.InvestUnitID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}jint iRtn= ptrApi->ReqQryTradingNotice(&QryTradingNotice, ( int) nRequestID);returniRtn;}
-
苹果相机前置摄像头自拍是真实的自己吗
用苹果前置摄像头拍出来的照片不是真实的自己,这是因为苹果手机的前置摄像头的像素非常高,拍出来的照片就像照镜子,人脸上的各种小斑点以及小痘印和细小的皱纹都看得清清楚楚,但也只是感觉像自己而已。但是也有一部份人认为不像真实的自己,好像五官都没有立体感了,当...
-
蓝牙耳机连接不上手机怎么办
1、首先,确保蓝牙耳机与手机都有电且处于开机状态,手机蓝牙功能处于打开状态。2、蓝牙耳机进入配对模式:在蓝牙耳机上会有一个多功能的按键,这个多功能的按键有一个作用是进行设备与蓝牙耳机之间的匹配,在与手机连接时,需要长按这个功能键,同时需要打开手机的蓝牙功能...
-
微信上的表情包怎么保存到手机,微信上的表情包如何保存到手机
1、在聊天记录中找到要保存的微信表情,长按该表情弹出菜单,然后选择编辑。2、在编辑界面中,可以根据自己的需求对表情图片进行修改,然后点击完成。3、在下方弹出的菜单中,点击保存图片。4、手机提示我们保存成功了,也就是说该微信表情已经保存到手机里了。...
-
无边框头像怎么制作,无边框头像的制作方法
1、首先在手机中下载一个抠图工具,比如小编用的是“抠图神手”,在各大APP应用市场都可以搜索找到,然后下载安装即可。2、然后打开抠图工具,然后从手机相册中,导入一张需要抠图的头像图片(为了方便抠图,建议尽量选择背景单一的头像图片)。3、导入头像进来之后,首先点击“...