Java Jna 回调函数

Min007 发布于 2017/07/20 11:31
阅读 418
收藏 0
JNA

在调用Delphi Dll的时候出现一个问题,事件回调函数一直走不通 接收不到正常的回调参数。

Delphi 代码

procedure SetEventCallBack(aCallHistoryEvent:TCallHistoryEvent);
参数:
参数	描述
aCallHistoryEvent	事件信息结构体;
备注:
事件过程定义
TCallHistoryEvent = procedure(pHost:PAnsiChar; aHistoryEvent : THistoryEvent);
参数:
参数	描述
pHost	指节点服务器的IP地址;
aHistoryEvent	事件信息结构体;
事件信息结构体定义
  THistoryEvent =  record
    EventID    : Word ;//事件ID
    CtrlAddress: Word ;//控制器地址
    PointAddress:Word ;//点地址
    CardZone   : LongInt ;//卡区号
    CardNo     : LongInt ;//卡号
    LinkageNo  : Word ;//
    UserZone   : Word ;//
    EventTime  : TDateTime ;//产生事件的日期
  end;

Java 代码

import java.util.ArrayList;
import java.util.List;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary.StdCallCallback;

public interface TCosn extends Library {
	
	static TCosn instanceDll = (TCosn) Native.loadLibrary("CSSClient", TCosn.class);

	interface TCallHistoryEvent extends StdCallCallback {
		void dCallHistoryEvent(String ip, THistoryEvent.ByValue tHistoryEvent);
	}
	//设置回调函数
	int SetEventCallBack(TCallHistoryEvent a);
	//初始化连接
	boolean AddHost(String ip);	
	public static TCallHistoryEvent callback = new TCosn.TCallHistoryEvent() {

		@Override
		public void dCallHistoryEvent(String ip,
				THistoryEvent.ByValue tHistoryEvent) {

			System.out.println("回调函数成功");

		}

	};

	public static class THistoryEvent extends Structure {
		public static class ByReference extends THistoryEvent implements
				Structure.ByReference {
		}

		public static class ByValue extends THistoryEvent implements
				Structure.ByValue {
		}

		public short EventID ;// 事件ID
		public short CtrlAddress ;// 控制器地址
		public short PointAddress ;// 点地址
		public int CardZone ;// 卡区号
		public int CardNo ;// 卡号
		public short LinkageNo ;//
		public short UserZone ;//
		public double EventTime;// 产生事件的日期
		@Override
		protected List<String> getFieldOrder() {

			 List<String> a = new ArrayList<String>();  
             a.add("EventID");  
             a.add("CtrlAddress");  
             a.add("PointAddress");  
             a.add("CardZone");  
             a.add("CardNo");  
             a.add("LinkageNo");
             a.add("UserZone");
             a.add("EventTime");
             return a;  

		}
	}
	 THistoryEvent.ByValue tHistoryEventStructValue = new THistoryEvent.ByValue();
	 THistoryEvent.ByReference RHistoryEventStructValue = new THistoryEvent.ByReference();
	
}

现在初始化连接正常,但是在做刷卡回调的时候没有任何反应。 求助

加载中
返回顶部
顶部