您的位置:首页 > 编程语言 > Java开发

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的解析,附上运行结果和代码:

运行结果:




代码:
//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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: