
第一步 建立一个监听类
建立监听类的作用是在应用中间件启动时自动执行加载程序。
1)创建一个类实现ServletContextListener 接口
2)实现contextInitialized方法
3)在项目的webxml 文件中配置此监听类
第二步 将dll文件所在的路径添加到系统环境javalibrarypath 中
添加过程需要使用到反射机制来进行,不能使用SystemsetProperty()进行设置,设置了也无效。直接看代码:
private void addDirToPath(String s){try {//获取系统path变量对象Field field=ClassLoaderclassgetDeclaredField("sys_paths");//设置此变量对象可访问 fieldsetAccessible(true);//获取此变量对象的值 String[] path=(String[])fieldget(null);//创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录String[] tem=new String[pathlength+1];//将原来的path变量复制到tem中 Systemarraycopy(path,0,tem,0,pathlength);//将增加的目录存入新的变量数组中 tem[pathlength]=s;//将增加目录后的数组赋给path变量对象fieldset(null,tem);} catch (Exception e) {eprintStackTrace();}}
第三步 加载dll文件
接下来就可以写上下文初始化的方法了:
public void contextInitialized(ServletContextEvent arg0) {//获取存放dll文件的绝对路径(假设将dll文件放在系统根目录下的WEB-INF文件夹中)String path=arg0getServletContext()getRealPath("WEB-INF");//将此目录添加到系统环境变量中 addDirToPath(path);//加载相应的dll文件,注意要将'\'替换为'/' Systemload(pathreplaceAll("\\\\","/")+"/XXXXdll");}
第四步 重启启动应用中间件(Tomcat|Weblogic)
至此就可以在你的java程序中使用dll文件的方法了。
将C:\ProgramFiles\CommonFiles\MicrosoftShared\DAO下的dao360dll和Msado15dll复制到C盘根目录下。然后运行: Regsvr32exe "C:\dao360dll" Regsvr32exe "C:\Msado15dll" 就OK了,注意,dao360dll和Msado15dll也打以复制到如C:\ee下,相就的运行就改变了: Regsvr32exe "C:\ee\dao360dll" Regsvr32exe "C:\ee\Msado15dll" 这样的目的的是防止路径中出现空格造成无法识别dao360dll和Msado15dll的真正路径。 原理:access导入xls,txtdoc等文件时,需要调用dao360dll和Msado15dll这两个文件,而有的盗版的office无法注册这两个文件的信息,造成加载dll失败。
C#的Dllimport不能直接调用指定路径的dll文件,可以使用以下几种方法调用dll文件:
一、把引用的DLL 拷贝到以下DllImport会自动去寻找的这三个地方:
1、exe所在目录;
2、System32目录;
3、环境变量目录。
二、可以直接在项目的引用里添加DLL文件。
以上就是关于Web应用程序中,如何实现动态加载DLL全部的内容,包括:Web应用程序中,如何实现动态加载DLL、怎么获取DLL导入导出表的信息和DLL导出的函、C#的Dllimport能不能调用指定路径的dll文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)