JNA 調用dll,復雜結構體(結構體包含數組,結構體包含結構體,結構體包含回調函數)


簡單dll:https://www.cnblogs.com/ttqi/p/12053715.html

dll調用類:

public class pdtEdsLoadDispatchDeviceInfo {
	public interface CLibbrary extends Library{
		
		String  esdapipatch=AgentGlobals.getXMLProperty("esdapipatch", "C:\\Program Files (x86)\\eastcom\\Eastcom DS 2000(Only SDK)\\sdk\\app\\api\\bin\\EdsApi");
		CLibbrary INSTANCE = (CLibbrary)Native.loadLibrary(esdapipatch, CLibbrary.class);
		int EdsSystemInit(EdsSystemParam_t.ByReference pSysParam);
		
	}
	

}

  

結構體:

public class EdsSystemParam_t extends Structure{
    public char[] userName=new char[17];
    public char[] userPassword=new char[17];
    public int isLinkOam = 2;
    public WString pResourceConfigFilePath;
    public EdsMsgCallBackProcF lpfnMmModuleProc;
    
    public String bInitGisSnmp = "ETFALSE";
    
    
    
            public static class ByReference extends EdsSystemParam_t implements Structure.ByReference{}
            
           
            public static class ByValue extends  EdsSystemParam_t implements Structure.ByValue{}
            
            @Override
            protected List getFieldOrder() {
                // TODO Auto-generated method stub
                return Arrays.asList(new String[]{"userName","userPassword","isLinkOam","pResourceConfigFilePath",
                    "lpfnSmModuleProc","bInitGisSnmp"});
            }

}

回調函數類:

public class EdsMsgCallBackProcF_class{
	
	public interface EdsMsgCallBackProcF extends StdCallCallback{
		public void MessageHandle(int nCode,String wParam,String lParam);
	}
	public static class MessageHandle_Realize implements EdsMsgCallBackProcF{
		public void MessageHandle(int nCode,String wParam,String lParam) {
              //回調后內部處理流程 Log.info("nCode:"+nCode+";wParam:"+wParam+";lParam:"+lParam); if(nCode==0x1550){ Constants.EdsMsgCallBackProcF=true; Constants.edsRadior.start(); }else if(nCode==0x1551 || nCode==0x1554){ Constants.EdsMsgCallBackProcF=false; Constants.edsRadior.stoptimer(); //new EdsRadioUserBaseInfoAction_timer().stop(); //new EdsSystemInitThread().start(); } } } }

  引用:

	String user=AgentGlobals.getXMLProperty("pdtuser",
						"admin");
	String password=AgentGlobals.getXMLProperty("pdtpassword",
						"123456");
	EdsSystemParam_t.ByReference param=new EdsSystemParam_t.ByReference();
				
	user.getChars(0, user.length(), param.userName, 0);
	password.getChars(0, password.length(), param.userPassword, 0);
	param.isLinkOam=2;
	//回調函數		
	EdsMsgCallBackProcF procf=new MessageHandle_Realize();
	param.lpfnMmModuleProc=procf;
				
	param.pResourceConfigFilePath=new WString(AgentGlobals.getXMLProperty("esdissipatch","C:\\Program Files (x86)\\eastcom\\config\\esdissi.xml"));
				
	//調用dll			
	int msg=CLibbrary.INSTANCE.EdsSystemInit(param);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM