社区
Web 开发
帖子详情
web项目中dll文件问题
quanmie
2007-02-10 01:47:09
在web开发中遇到了用jni调用c++编译的dll 文件,现在有个问题是当把该dll文件放到tomcat目录下的bin文件夹下,或是jdk/bin文件夹下,程序才能正确访问,否则就会找不到该文件。
请问大家有没有好的方法,能把dll文件放到本地项目中就可以访问呢?比如说放到项目下的WEB-INF文件夹下,或是其它地方。
...全文
716
14
打赏
收藏
web项目中dll文件问题
在web开发中遇到了用jni调用c++编译的dll 文件,现在有个问题是当把该dll文件放到tomcat目录下的bin文件夹下,或是jdk/bin文件夹下,程序才能正确访问,否则就会找不到该文件。 请问大家有没有好的方法,能把dll文件放到本地项目中就可以访问呢?比如说放到项目下的WEB-INF文件夹下,或是其它地方。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
quanmie
2007-02-12
打赏
举报
回复
终于成功了,原来确实要load绝对路径,而且不可以使用system.loadlibrary方法,要使用system.load方法,后来看了,java的api,load方法是加载一个动态库文件,而loadlibrary是加载一个lib文件。而且之前没有加载正确,还有一个原因就是必须将加载代码放在static 块中,这也是为什么网上给的例子都是这么写的原因。只有程序执行之前,将dll文件加载到内存中,之后的程序才能找到,昨天我试的时候,忘了这一点,没有加static所以也没能找到,谢谢大家的帮助。
quanmie
2007-02-12
打赏
举报
回复
public class CheckImage {
public native static void check(String imagePath,int sensitivity);
static
{
System.loadLibrary("CheckImage");
}
public CheckImage()
{
}
}
这就是调用dll的代码,用绝对路径也不行,我试了。
quanmie
2007-02-12
打赏
举报
回复
只不过dll上传到服务器上后,无法正确执行,明明可以load以它,但一执行就出错。唉。。。
liaohaiying
2007-02-10
打赏
举报
回复
你把调用DLL的代码贴出来
这个不是TOMCAT启动时自动加载,而是系统在开机时就根据环境变量里设的,把环境变量里的目录都设为全局属性(这个我不知道怎么说,就是在CMD下能在任何一个目录下使用环境变量中定义的目录下的文件,如你没给JDK定义环境变量,那么只能在JDK目录下的BIN下才会运行JAVA命令,反之就可以在任何地方运行JAVA命令),就是把你调用这个文件时的目录给算掉了,如果没有在环境变量中定义,那么要调用就必须带上文件的全目录地址才行
你先把调用DLL的代码贴出来看看
wanzyqyy
2007-02-10
打赏
举报
回复
路过,帮顶!
quanmie
2007-02-10
打赏
举报
回复
to:liaohaiying(大菜)
你没明白我的意思,我不是找不到路径,而是在web项目中使用jni调用dll,这个dll如果不放到tomcat/bin或jdk/bin下面的话,程序就找不到,程序不能正确执行,如果放到tomcat/bin或jdk/bin下面,tomcat启动时好像会自动加载,然后程序就执行正常了。
加载dll的过程是由tomcat自动执行的,好像没办法往里面传路径。
我现在在找一个方法改变这种情况,可以把dll文件放到项目下的WEB-INF目录下就可以让程序正确执行,目前试了很多办法,都不奏效。实在是郁闷。谢谢大家的回复。
liaohaiying
2007-02-10
打赏
举报
回复
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目录</title>
</head>
<body>
<%
String path=request.getRealPath("");
out.println(path);
%>
取得虚拟目录对应的磁盘路径<br>
Web站点主目录的位置为<font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP网页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP网页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>
得到磁盘路径后总归行了吧
quanmie
2007-02-10
打赏
举报
回复
试了半天,除了不好使还是不好使。
“meteorlg(lance) 的方法就是找WEB-INF目录,定位了WEB-INF了,就可以找到你的DLL文件的位置,这样应该就能调用了”
只一个rootPath就可以让系统自动识别路径了吗?系统怎么会自动去按rootPath所指的路径找文件?
liaohaiying
2007-02-10
打赏
举报
回复
看错,不是bin文件夹,是lib,
这样的话,就是环境变量的问题了,你把这个DLL文件放在WINDOWS下的SYSTEM32下也一定行的,
meteorlg(lance) 的方法就是找WEB-INF目录,定位了WEB-INF了,就可以找到你的DLL文件的位置,这样应该就能调用了
liaohaiying
2007-02-10
打赏
举报
回复
tomcat目录下的bin文件夹和项目WEB-INF下的bin文件夹按道理讲是一样的,没道理不行的
quanmie
2007-02-10
打赏
举报
回复
难道没人来看吗?
quanmie
2007-02-10
打赏
举报
回复
to:zzj9898(止住悲伤,继续前进...)
我将文件放在项目下每个目录都不行。
to:meteorlg(lance)
高手,能详细解释一下如何调用这个类吗?那个ServletContextEvent从哪得来?
然后得到这个路径了,怎样读取dll文件呢?我调用dll文件的类里面用的是System.loadLibrary("XXX");然后在别的类里实例化这个类就可以了,那个绝对路径应该用在什么地方?
meteorlg
2007-02-10
打赏
举报
回复
public class SystemLoader implements ServletContextListener {
private static String rootPath;
public void contextInitialized(ServletContextEvent sc) {
rootPath=sc.getServletContext().getRealPath("/");
}
}
然后在web.xml中写
<listener>
<listener-class>com.lance.vs.web.controller.SystemLoader</listener-class>
</listener>
这样就取得了根目录的绝对路径
然后你用rootPath+"WEB-INF\\xxx.dll
就可以读取你的dll文件了
zzj9898
2007-02-10
打赏
举报
回复
放在WEB-INF/lib或者WEB-INF/classes 下不知道行不行的?
也可以试下设置环境变量PATH=<路径>/<dll文件名字>.dll;
如果不行的话,就当是帮你顶了~~~呵
System.Web.Extensions.
dll
Parser Error Message: Could not load file or assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. 系统找不到指定的
文件
。 分析器错误消息:找不到指定的
文件
系统。网络。扩展版本=1.0.61025.0,文化
中
立,publickeytoken=31bf3856ad364e35或它所依赖的。系统找不到指定的
文件
。 出现该错误解决办法 将System.Web.Extensions.
dll
与System.Web.Extensions.Design.
dll
放到项目BIN目录
在
web项目
中
引用带有
dll
文件
处理方式
最近在一个
web项目
中
使用东方通Tonglink/Q,jar包之类的都引入了,但还是一直报“Could not initialize class”异常。经过研究发现,在
WEB项目
中
引用这种带有
dll
动态链接
文件
的,除了引入所需要的jar包外,还需要把依赖的
dll
文件
分别放入容器的运行环境和lib包下。 目前用的是Tomcat,所以需要把
dll
文件
放入bin
文件
下。同时放入lib包下(有些情况下...
Windows进程常用
DLL
模块注入技术
进程调试级注入,涉及调试器相关功能调用知识点
dll
模块重定位内存注入,模拟操作系统加载PE
文件
方式,直接将
dll
文件
内存数据写入目标进程并执行。 导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入...
Java之—— JAVA
Web项目
中
DLL
/SO
文件
动态加载方法
相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web
中
又如何实现
DLL
/SO
文件
的动态加载方法呢。今天就给大家带来一篇JAVA
Web项目
中
DLL
/SO
文件
动态加载方法的文章。 在Java
Web项目
中
,我们经常会用到通过JNI调用
dll
动态库
文件
来实现一些JAVA不能实现的功能,或者是一些第三方
dll
插件。通常的做法是将这些
dll
文件
复制到 %J
Java之——
Web项目
中
DLL
文件
动态加载方法
在Java
Web项目
中
,我们经常会用到通过JNI调用
dll
动态库
文件
来实现一些JAVA不能实现的功能,或者是一些第三方
dll
插件。通常的做法是将这些
dll
文件
复制到 %JAVA_HOME%\jre\bin\
文件
夹或者 应用
中
间件(Tomcat|Weblogic)的bin目录下之后,在程序
中
才能正常使用。但是这个步骤在项目实施或移植时经常会被忘记,比较麻烦,所以就考虑能否在项目运行过程
中
动态加载
Web 开发
81,091
社区成员
341,719
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章