当前位置: 首页 > article >正文

jacob 用法

(1)我从官网下载到的 压缩包是


jacob-1.18-M2.zip ,地址http://sourceforge.net/projects/jacob-project/ 

(2)将 jacob.dll  放入 windows-》  system32 目录下,同时再放一份到类路径下 比如 maven项目 放到 src/main/resources 下 。然后将jacob.jar 添加到 classpath下。

(3)现在已经可以用jacob api调用dll 组件 了,贴上一份测试过的代码。

package com.gushiyingxiong.stockagent.utils;import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import org.apache.log4j.Logger;
import org.jawin.COMException;
import org.jawin.DispatchPtr;import com.gushiyingxiong.stockagent.GlobalVar;
import com.gushiyingxiong.stockagent.exception.ConnectionInvidException;
import com.gushiyingxiong.stockagent.exception.ReadException;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Variant;public final class JacobHsCommXClient implements IHsCommXClient {private static final Logger LOGGER = Logger.getLogger(JacobHsCommXClient.class);private static AtomicLong _ID=new AtomicLong(0);private long id;private ActiveXComponent client;private AtomicInteger senderId = new AtomicInteger(0);public JacobHsCommXClient() {try {id=_ID.incrementAndGet();client = new ActiveXComponent("HsCommX.Comm");client.invoke("create");
//			client.put("ReceiveTimeOut", 20);
//			int con = (int) client.invoke("Connect");int con = connect();if (con != 0) {
//				String errorMsg = ;LOGGER.error("证券客户端[id="+id+"]连接失败,异常信息:"+(String) client.getPropertyAsString("ErrorMsg"));// System.exit(-1);}elseLOGGER.info("证券客户端[id="+id+"] 连接成功");// System.out.println(con);} catch (Exception e) {LOGGER.error("证券客户端[id="+id+"] 连接失败" + "异常信息:" + e.getMessage());// System.exit(-1);}}@Overridepublic JSONObject callX(int iFunc, Map<String, Object> params)throws Exception {return callX(1, iFunc, params);}public int connect() {Variant con = new Variant(-1);try {// 经过测试 解密密钥 长度 应=16// 再说明 如果 不加密 keyLen 必须传0int keyciper = GlobalVar.STOCK_KEYCIPER;String key = GlobalVar.STOCK_KEY;int keyLen = key.getBytes("UTF-8").length;if (keyciper == 0)keyLen = 0;con =  client.invoke("Connectx", new Variant(GlobalVar.STOCK_PROTOCOL),new Variant(GlobalVar.STOCK_SERVER_IP),new Variant(GlobalVar.STOCK_SERVER_PORT),new Variant(keyciper),new Variant(key),new Variant(keyLen));} catch (Exception e) {LOGGER.error("东莞证券 service 连接失败" + "异常信息:" + e.getMessage());}return con.getInt();}/*** * * @param FiBranchNo*            开户营业部号* @param iFunc*            功能号* @param params* @return*/public JSONObject callX(int FiBranchNo, int iFunc,Map<String, Object> params) throws Exception {JSONObject result = new JSONObject();JSONArray arr = null;client.invoke("SetHead", FiBranchNo, iFunc);client.invoke("SetRange", params.size(), 1);if (params != null || params.size() != 0) {for (String key : params.keySet()) {client.invoke("AddField", key);}for (Object v : params.values()) {client.invoke("AddValue", new Variant(v));}}int _senderId = senderId.incrementAndGet();client.setProperty("SenderId", _senderId);Variant issend = client.invoke("Send");if (issend.getInt() == 0) {client.invoke("freepack");int isrecive =  client.invoke("Receive").getInt();if (isrecive == 0) {int ret_Id = (int) client.getPropertyAsInt("SenderId");int errorNo = (int) client.getPropertyAsInt("ErrorNo");if (ret_Id != _senderId) {LOGGER.warn((String) client.getPropertyAsString("ErrorMsg"));result.put("error_no", -1);result.put("error_info", "东莞证券api 请求失败");return result;}if (params.containsKey("request_num")&& params.containsKey("position_str")) {arr = new JSONArray();int eof = 1;while ((eof = (int) client.getPropertyAsInt("Eof")) == 0) {JSONObject temp = new JSONObject();int filedCount = (int) client.getPropertyAsInt("Fieldcount");// int filedCount=2;for (int i = 0; i < filedCount; i++) {String key =  client.invoke("GetFieldName",i).getString();temp.put(key, client.invoke("FieldByName", key));}arr.add(temp);client.invoke("MoveBy", 1);}String _er_no=null;if(arr.size()==1)_er_no = (String) arr.getJSONObject(0).get("error_no");if (_er_no != null&& !"0".equals(_er_no)) {result = arr.getJSONObject(0);} else {result.put("list", arr);}} else {int filedCount = (int) client.getPropertyAsInt("Fieldcount");LOGGER.info("filedCount"+filedCount);for (int i = 0; i < filedCount; i++) {LOGGER.info("i="+i);String key = client.invoke("GetFieldName", i).getString();String value=client.invoke("FieldByName", key).getString();LOGGER.info(key+"="+value);result.put(key, value);}result.put("entrust_no",  client.invoke("FieldByName", "entrust_no").getString());}} else {int errorNo = (int) client.getPropertyAsInt("ErrorNo");String errorMsg = (String) client.getPropertyAsString("ErrorMsg");LOGGER.info(errorMsg);throw new ReadException(errorMsg);}} else {int errorNo = (int) client.getPropertyAsInt("ErrorNo");String errorMsg = (String) client.getPropertyAsString("ErrorMsg");LOGGER.info(errorMsg);throw new ConnectionInvidException(errorMsg);}return result;}@Overridepublic void close() {try {if (client != null) {client.invoke("DisConnect");client.invoke("Free");}} catch (Exception e) {LOGGER.info(e.getMessage());}}public static void main(String[] args) throws COMException {DispatchPtr client = new DispatchPtr("HsCommX.Comm");client.invoke("create");client.invoke("SetConnect");int con = (int) client.invoke("Connect");if (con != 0) {LOGGER.error("证券客户端 创建失败");// System.exit(-1);}client.invoke("Disconnect");client.invoke("Free");}
}

 





http://www.lryc.cn/news/2420224.html

相关文章:

  • 简明 SQL 去重指南:掌握 DISTINCT 实现数据去重
  • 【win】系统工具Win PE
  • 响应头Content-disposition的作用及用法
  • VS2015安装
  • Shell中if的使用详解_与||的使用详解
  • PostScript文件
  • 虚拟化 | 使用VMware vCenter Converter快速将计算机从物理环境或其他虚拟化平台迁移到vSphere环境...
  • 各种常见编码的转换算法
  • 数据结构-用大白话讲清楚时间复杂度和空间复杂度
  • 标签特性attribute和元素节点属性property
  • Location 对象
  • 【超级干货】鸟哥笔记VS知乎刘锤:一个运营牛人的进化论
  • SVN客户端 创建分支/合并分支/切换分支
  • 2024年最全用Python创建多线程的几种方法_python类中创建两个线程
  • 解决 Windows 蓝屏错误 0x0000007B 的方法
  • 欧几里得辗转相除法证明及推论
  • Istanbul算法详解
  • 华为配置Hotspot2.0无线网络示例
  • 机器人坐标系基本概念
  • 华为技术实操 || DHCP实验
  • java中常用的5种设计模式
  • zTree学习笔记1---zTree从零搭建(新手基础教程)
  • Android Gson使用详解
  • Oracle对时间date,to_date(),to_char()的理解
  • IAR的基本使用教程
  • MySQL下载及安装最新版教程
  • 深入了解memcached缓存数据库
  • open-webui入门
  • RIL 机制---开篇
  • 一篇彻底学懂补码