JNative:JAVA调用DLL

为了在Java开发环境中使用DCMTK,做了以下工作:

(1)选择Java调用C++的工具 

通过比较和测试JNIJNABridJSWIGJNative,考虑易用性和功能性,选择了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  

现在进入通过JNativeJava调用DCMTK阶段。JNative无法对调用Qt的导出类,只能调用导出函数,现在正在进行函数封装,对封装后的函数进行调用可以实现DICOM的解析。

现在已经成功实现Java调用DCMTKDLL,完成DICOM信息tag的解析,附上运行结果和代码:

运行结果:

JNative:JAVA调用DLL_第1张图片

代码:
//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(); 
			 }
	 } 
}


你可能感兴趣的:(JNative,Java学习,DCMTK)