jacob 用法

来源:互联网 发布:linux查看显卡命令 编辑:程序博客网 时间:2024/05/16 04:15
(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");}}

 





0 1
原创粉丝点击