JNative:JAVA调用DLL
2016-05-27 16:34
435 查看
为了在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的解析,附上运行结果和代码:
运行结果:
(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的解析,附上运行结果和代码:
运行结果:
代码:
//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(); } } }
相关文章推荐
- Java基础知识:面向对象-基本概念
- java遍历map集合中的元素的方法。
- Spring.Net Ⅰ.pp---浅尝
- 如何编写一个自己的校验框架
- 桶排序与基数排序代码(JAVA)
- Java执行CMD命令并等待返回结果
- JAVA学习(10) 继承(2) 继承中的方法的覆盖和重载
- 排序算法源码(JAVA)
- Spring的ProxyFactoryBean和BeanNameAutoProxyCreator的配置
- JAVA8 十大新特性详解
- Java单例进化史
- java字段与数据库字段映射
- java反射机制详解
- 直接I/O写入与自定义缓存区I/O读写性能之间的区别
- Java内部类总结
- 二叉排序树BST代码(JAVA)
- JAVA学习(10) 继承(1)
- java中ThreadPoolExecutor线程池的使用
- Base64Utils 在Java后台的扩展
- Java集合类详解