我用JNA调用C实现PDF电子签章,我把所有的DLL文件放到JDK的bin目录下可以正常运行,但改成绝对路径,就报无效内在访问,把该路径设到系统环境变量也是报错,放在system32下也是一样的错误:
Exception in thread "main" java.lang.Error: Invalid memory access
写据对路径试试。我这边调用dll的时候,有时候放.java的同级目录,然后直接写动态库名称就会报错,但是是说找不到dll。如果写绝对路径,例如E:\MyDll.dll就没问题。现在我是这样写的,也没问题######
非常感谢这哥们的回复,我写了绝对路径还是不行,非得在jdk的bin目录下才可以,没辙了,现在换成JNI来实现:
public class WLPTJNINetSign {
static{
System.loadLibrary("abc");
}
public native int getCSPVersion();//调这个方法可以正常运行
public native int SignPDF(String srcPath, String desPath);//调这个方法就报下面的错
public static void main(String[] args) {
try {
WLPTJNINetSign wlptjniNetSign=new WLPTJNINetSign();
System.out.println(wlptjniNetSign.SignPDF(srcPath, desPath));
} catch (Exception e) {
e.printStackTrace();
}
}
}
完了却又报这个错,是java的原因还是c++的原因呢
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434f4d), pid=8584, tid=10028
#
# JRE version: 6.0_45-b06
# Java VM: Java HotSpot(TM) Client VM (20.45-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [KERNELBASE.dll+0x812f]
#
# An error report file with more information is saved as:
# E:\Workspaces\hs_err_pid8584.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
非常感谢这哥们的回复,我写了绝对路径还是不行,非得在jdk的bin目录下才可以,没辙了,现在换成JNI来实现:
public class WLPTJNINetSign {
static{
System.loadLibrary("abc");
}
public native int getCSPVersion();//调这个方法可以正常运行
public native int SignPDF(String srcPath, String desPath);//调这个方法就报下面的错
public static void main(String[] args) {
try {
WLPTJNINetSign wlptjniNetSign=new WLPTJNINetSign();
System.out.println(wlptjniNetSign.SignPDF(srcPath, desPath));
} catch (Exception e) {
e.printStackTrace();
}
}
}
完了却又报这个错,是java的原因还是c++的原因呢
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434f4d), pid=8584, tid=10028
#
# JRE version: 6.0_45-b06
# Java VM: Java HotSpot(TM) Client VM (20.45-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [KERNELBASE.dll+0x812f]
#
# An error report file with more information is saved as:
# E:\Workspaces\hs_err_pid8584.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。
println(f"#${System.getProperty("java.library.path")}#")
正常只要dll或者so文件在目录下就可以正确运行。
另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。
JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。
println(f"#${System.getProperty("java.library.path")}#")
正常只要dll或者so文件在目录下就可以正确运行。
另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。
下面都是输出的java.library.path路径:
D:\Program Files\Java\jdk1.6.0_45\bin;//放在这个目录下可以正常运行
JNA的路径是基于java.library.path或者系统变量LD_LIBRARY寻找dll或是so库文件,调用之前,你可以看一下文件是否在变量值的路径内。
println(f"#${System.getProperty("java.library.path")}#")
正常只要dll或者so文件在目录下就可以正确运行。
另外,注意linux下的so文件命名有一个前缀lib而dll文件是没有的这个区别。
下面都是输出的java.library.path路径:
D:\Program Files\Java\jdk1.6.0_45\bin;//放在这个目录下可以正常运行
猜测是不是你在适用引用对象的时候有点问题,例如找找有没有下面之类的代码:
PointerByReference.getValue()
非常感谢这哥们的回复,我写了绝对路径还是不行,非得在jdk的bin目录下才可以,没辙了,现在换成JNI来实现:
public class WLPTJNINetSign {
static{
System.loadLibrary("abc");
}
public native int getCSPVersion();//调这个方法可以正常运行
public native int SignPDF(String srcPath, String desPath);//调这个方法就报下面的错
public static void main(String[] args) {
try {
WLPTJNINetSign wlptjniNetSign=new WLPTJNINetSign();
System.out.println(wlptjniNetSign.SignPDF(srcPath, desPath));
} catch (Exception e) {
e.printStackTrace();
}
}
}
完了却又报这个错,是java的原因还是c++的原因呢
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434f4d), pid=8584, tid=10028
#
# JRE version: 6.0_45-b06
# Java VM: Java HotSpot(TM) Client VM (20.45-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [KERNELBASE.dll+0x812f]
#
# An error report file with more information is saved as:
# E:\Workspaces\hs_err_pid8584.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。