如何解决java调dll报Unable to load library的错误
1个回答
展开全部
1、必须确保设定的路径下有需要加载的dll文件;
2、jar是64位,则dll文件必须也是64位,如果jar是32位,则dll文件必须也是32位;
3、PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("soft\\hikvision\\PlayCtrl", PlayCtrl.class);
其中"soft\\hikvision\\PlayCtrl"可以是绝对路径,也可以是相对路径,但是,路径分隔符必须是\,不能是/,(这里使用\\是因为第一个\是转义字符)(别问我为什么,我也不知道,我就是这样改了之后就可以了)
4、在Tomcat中调用时,可将dll文件放在src目录下,编译后会自动存放到WebRoot\WEB-INF\classes\路径下,在调用时可使用如下方法:
String path = HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll";
// 如何tomcat路径中有空格,加上这句path=path.replaceAll("%20", " ");
// 上述方法获取的path最前边第一个字符是/,如【/d:/RTSMS_x64/Servent/HCNetSDKCom/HCNetSDK.dll】
所以我用了以下方法
String path = (HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll").replaceAll("%20", " ").substring(1).replace("/", "\\");
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path,HCNetSDK.class);
2、jar是64位,则dll文件必须也是64位,如果jar是32位,则dll文件必须也是32位;
3、PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("soft\\hikvision\\PlayCtrl", PlayCtrl.class);
其中"soft\\hikvision\\PlayCtrl"可以是绝对路径,也可以是相对路径,但是,路径分隔符必须是\,不能是/,(这里使用\\是因为第一个\是转义字符)(别问我为什么,我也不知道,我就是这样改了之后就可以了)
4、在Tomcat中调用时,可将dll文件放在src目录下,编译后会自动存放到WebRoot\WEB-INF\classes\路径下,在调用时可使用如下方法:
String path = HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll";
// 如何tomcat路径中有空格,加上这句path=path.replaceAll("%20", " ");
// 上述方法获取的path最前边第一个字符是/,如【/d:/RTSMS_x64/Servent/HCNetSDKCom/HCNetSDK.dll】
所以我用了以下方法
String path = (HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll").replaceAll("%20", " ").substring(1).replace("/", "\\");
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path,HCNetSDK.class);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |