nicai0609 / JAVA-CTPAPI

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

查询结算单会丢失部分数据

mfkvfn opened this issue · comments

查询结算单ReqQrySettlementInfo的响应OnRspQrySettlementInfo中,一般会拆成多份,最后 一个的bIsLast是true其它的是false。

但是每次都有一些内容为空。比如有5个响应,本来是想将这5个响应的Content拼成一个,但是一般总是有几个Content为null。拼出来的结算单与其它第三方软件(比如金字塔)中看到的不一样。一般会丢失第2个或第3个。

按理说其它第三方软件也是用的这个接口,既然它们能显示正常的结算单,说明证券公司返回的是没有问题的。

不会C++,不知道原始的C++接口中会不会有这种情况。

感觉是 https://blog.csdn.net/weixin_30579759/article/details/112575846 这里说的原因。

VC++不太会弄。另外,CTP官网都出到 6.5.1 版本了,作者可以升级一下,然后用上面网址中的方法改进一下。

windows还是linux?尝试下最新版的API

windows。试过最新的6.6.1_p1版本。还是有类似的问题。结算单是分多次返回的,在中间连接的部分出现有问号或乱码的问题。

我之前按 https://blog.csdn.net/weixin_30579759/article/details/112575846 的方法(每次取前500字节拼到一起成byte[]数组,然后Java中再转换成字符串)自行处理过6.3.15版本,是可以正常工作的。

具体变动:thosttraderapi_wrap.dll的cpp源文件中CThostFtdcSettlementInfoField的getContent()返回byte[](要去掉最后的'\0'),java代码中将所有收到的byte[]用Syste,.arraycopy合并到一起成一个大byte[],最后当isLast是true时,return new String(allBytes,"GBK")

嗯嗯,结算单乱码问题是需要单独修改代码解决的。原文见:
https://blog.csdn.net/pjjing/article/details/103104047

上面网址中的代码不完整,重点的处理代码没放出来。声明了result但是没有使用,函数也没有返回值。应该要将result转换处理成jresult并返回。

建议你github中放出的dll中按你自己的文章处理好。不要让人根据你的文章二次处理。很多人用Java版本的原因是根本不会C++,要自行编译dll很困难。

好的