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、打开safari,接着进入苹果官网,点击左上角的两道杠图标,点击技术支持,点击搜索支持框,点击快速链接的保修状态查询,最后输入序列号,输入验证码,点击继续即可查看。...
-
ipad如何锁定屏幕旋转
1、首先打开ipad,点击屏幕上的“小白点”,会出现“通知”、“设备”、“控制中心”、“主屏幕”、“siri”和自定。2、点击设备进入,会出现旋转屏幕,锁定屏幕旋转、更多、调低音量、调高音量、锁定屏幕等选项。3、最后点击“锁定屏幕旋转”,屏幕便不会旋转了。...
-
手机屏幕上出现黑斑怎么解决
1、重新开关机。2、切换到不同界面,查看是否都是同一位置出现此情况。初步排除图案背景问题。3、恢复出厂设置尝试。4、如果问题依旧,需要对实物机器进行实际检测。建议将手机送至就近的服务中心进行检测,服务中心会根据检测结果确定手机的具体问题以及配件。...