欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java調(diào)用相互依賴的dll的處理方法

 更新時(shí)間:2022年01月28日 08:44:12   作者:斗戰(zhàn)勝yuan  
大家好,本篇文章主要講的是java調(diào)用相互依賴的dll的處理方法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

一、問(wèn)題描述

最近在做一個(gè)功能時(shí)遇到j(luò)ava需要調(diào)用dll,并且dll有依賴關(guān)系,之前都是單獨(dú)調(diào)用一個(gè),其實(shí)調(diào)用dll的都是模板代碼,本身沒(méi)有太高的難度,主要是相互依賴的還是第一次碰見(jiàn),特此記錄一下并分享給需要的朋友參考。

二、處理辦法

其中A是dll方法的入口,A依賴B,C,D,E,F(xiàn),G五個(gè)dll,先定義接口繼承StdCallLibrary ,編寫(xiě)加載各個(gè)dll的模板代碼,需要依賴的都全部加載進(jìn)來(lái),我這兒是A依賴了B,C,D,E,F(xiàn),G六個(gè)dll,所以我這里共寫(xiě)了六個(gè)接口,來(lái)分別加載不同的dll,主要是因?yàn)镾tdCallLibrary不支持加載多個(gè)dll,如果支持的話就不用寫(xiě)多個(gè)了,廢話不多說(shuō)直接上代碼:

2.1 類定義

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

/**
 * 
 * ClassName: DllLoadClass <br/> 
 * Function: TODO ADD FUNCTION. <br/> 
 * Reason: TODO ADD REASON(可選). <br/> 
 * date: 2022年1月27日 下午5:08:21 <br/> 
 * 
 * @author 行則將至 
 * @version
 */
public class DllLoadClass {
	
	/**
	 * 
	 * ClassName: A <br/> 
	 * Function: TODO 加載A. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:08:58 <br/> 
	 * 
	 * @author 行則將至 
	 * @version DllLoadClass
	 */
	public interface A extends StdCallLibrary {
		String dllName = "dllv2/A";
		
		A INSTANCE = Native.load(dllName,A.class);
		
		public String a(String inString);
		 
	}
	
	/**
	 * 
	 * ClassName: B <br/> 
	 * Function: TODO 加載B. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:09:27 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface B extends StdCallLibrary {
		String dllName = "dllv2/B64";
		
		B INSTANCE = Native.load(dllName,B.class);
		
	}
	
	/**
	 * 
	 * ClassName: C <br/> 
	 * Function: TODO 加載C. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:09:41 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface C extends StdCallLibrary {
		String dllName = "dllv2/C64";
		
		C INSTANCE = Native.load(dllName,C.class);
	}
	
	/**
	 * 
	 * ClassName: D <br/> 
	 * Function: TODO 加載D. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:09:50 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface D extends StdCallLibrary {
		String dllName = "dllv2/D64";
		
		D INSTANCE = Native.load(dllName,D.class);
	}
	
	/**
	 * 
	 * ClassName: E <br/> 
	 * Function: TODO 加載E. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:10:37 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface E extends StdCallLibrary {
		String dllName = "dllv2/E64";
		
		E INSTANCE = Native.load(dllName,E.class);
	}
	
	/**
	 * 
	 * ClassName: F <br/> 
	 * Function: TODO 加載F. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:10:01 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface F extends StdCallLibrary {
		String dllName = "dllv2/F64";
		
		F INSTANCE = Native.load(dllName,F.class);
	}
	
	/**
	 * 
	 * ClassName: G <br/> 
	 * Function: TODO 加載G. <br/> 
	 * Reason: TODO ADD REASON(可選). <br/> 
	 * date: 2022年1月27日 下午5:10:10 <br/> 
	 * 
	 * @author 行則將至  
	 * @version DllLoadClass
	 */
	public interface G extends StdCallLibrary {
		String dllName = "dllv2/G64";
		
		G INSTANCE = Native.load(dllName,G.class);
	}
	
}

2.2 調(diào)用

上邊雖然是定義出來(lái)了,那么怎么調(diào)用或者使用呢?調(diào)用其實(shí)也很簡(jiǎn)單,都定義出來(lái)了之后,其實(shí)就是需要咱們把依賴都加載進(jìn)來(lái)即可,咱們?nèi)匀皇侵苯由洗a:

public class Test {

	@SuppressWarnings("unused")
	public static void main(String[] args) {
		B b = DllLoadClass.B.INSTANCE;
		C c = DllLoadClass.C.INSTANCE;
		D d = DllLoadClass.D.INSTANCE;
		F f = DllLoadClass.F.INSTANCE;
		G g = DllLoadClass.G.INSTANCE;
		A a = DllLoadClass.A.INSTANCE;
		
		String result = a.a("");
	}
}

原理就是調(diào)用一下成員變量,讓其加載進(jìn)來(lái)即可。

三、結(jié)語(yǔ)

道阻且長(zhǎng),行則將至,行而不輟,未來(lái)可期,加油。

到此這篇關(guān)于java調(diào)用相互依賴的dll的處理方法的文章就介紹到這了,更多相關(guān)java相互依賴的dll內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論