天天看點

JNative:JAVA調用DLL

為了在Java開發環境中使用DCMTK,做了以下工作:

(1)選擇Java調用C++的工具 

通過比較和測試JNI、JNA、BridJ、SWIG和JNative,考慮易用性和功能性,選擇了JNative(

               a.下載下傳jnative.jar 及JNativeCpp.dll ;

      b. jnative.jar 加載到目前工程下;

  c.将使用的dll檔案及JNativeCpp.dll拷貝至系統system32下或項目根目錄,一定要通過dll檢視器将涉及到所有dll檔案都拷貝到根目錄下 。 )

(2)編譯動态庫dll  

為了在Java環境中可以調用C++庫,需要生成其的動态連結庫,Qt封裝的DCMTK的動态庫已編譯好。

(3)Java調用DCMTK  

現在進入通過JNative,Java調用DCMTK階段。JNative無法對調用Qt的導出類,隻能調用導出函數,現在正在進行函數封裝,對封裝後的函數進行調用可以實作DICOM的解析。

現在已經成功實作Java調用DCMTK的DLL,完成DICOM資訊tag的解析,附上運作結果和代碼:

運作結果:

JNative:JAVA調用DLL
代碼:
           
//20160520 将擷取tag的函數封裝好了 【dcx】
 public String getTag(int pFile,String tag) throws NativeException, IllegalAccessException {
	 JNative vTag = null;
	 try { 
		 vTag =new JNative("SpiderDicomFileD", "ParseTag");
		 int i = 0;
		 vTag.setRetVal(Type.STRING);
		 vTag.setParameter(i++, pFile);
		 //String tag="0018,1110" 
		 //substring(0,m)截取[0,m)之間的子字元串   substring(m)截取[m,end]之間的子字元串
		 String getFirst = tag.substring(0,4);
		 String getSecond = tag.substring(5);
		 //String getSecond = tag.substring(tag.indexOf(",") + 1);
		 //十六進制轉十進制 Integer.parseInt("0018",16) 給tag傳入代号
		 vTag.setParameter(i++, Integer.parseInt(getFirst,16));
		 vTag.setParameter(i++, Integer.parseInt(getSecond,16));
		 vTag.invoke();
		 return vTag.getRetVal();
		 } 
	 finally{ 
		 if (vTag !=null){ 
			 vTag.dispose(); 
			 }
	 } 
}
           

繼續閱讀