Web应用程序中,如何实现动态加载DLL

Web应用程序中,如何实现动态加载DLL,第1张

第一步 建立一个监听类

建立监听类的作用是在应用中间件启动时自动执行加载程序。

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文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9269991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存