使用JNI,vs2010 生成dll, JSP中调用dll

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java
Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

主要运行过程:创建Java文件---->使用 javah 编译生成相应的头文件供vs2010 中使用--->使用vs2010 编译生成dll文件

我的运行环境:

a、Myeclipse 10  中创建了Web项目TestDll    路径: D:\Program Files\MyEclipse10\MyEclipse 10\DLLworkspace\TestDll

b、VS2010  中创建了项目Util,路径: C:\Users\Admin\Documents\Visual Studio 2010\Projects\DLLTest\Util

c、tomcat目录:D:\apache-tomcat-6.0.29

d:jdk环境:C:\Program Files (x86)\Java\jdk1.7.0_45

1、开始 编写java文件

package com.jni;

public class Util {
	public native static int add(int x,int y);
	static {
		   System.loadLibrary( "Util" );//是需要加载的dll文件名称,在vs2010创建项目时名称需要定义为Util
	}
}

   2、生成对应的头文件:打开一个dos窗口,进入到存放class文件的目录:

输入命令: javah -classpath . -jni com.jni.Util   (class路径表示当前位置,类需要带上包的信息)  这样在classes目录下会生成com_jni_Util.h文件

3、vs2010
中生成dll文件

创建项目; Win32 控制台应用程序--->输入名称Util--->应用程序类型为Dll,附加选项中选中空项目然后点击完成。

从jdk目录下找到文件jni.h(在include文件中)和jni_md.h(在include/win32目录下)文件

在项目Util中创建文件夹include
,然后将文件 jni.h,           jni_md.h      和 com_jni_Util.h文件拷贝到该文件夹下

创建C++文件Util.cpp

//Util.c
#include "com_jni_Util.h"
#include "jni.h"

JNIEXPORT jint JNICALL Java_com_jni_Util_add
(JNIEnv *env, jclass jc, jint x, jint y)
{
    return x+y;
}

若Util.cpp中无法引用到头文件,需要设置.选中项目---->右击
 属性--->C/C++  附加包含目录中编辑添加  .\include

结构如图所示:

然后右击项目,选择生成,会在输出目录(C:\Users\Admin\Documents\Visual Studio 2010\Projects\DLLTest\Debug)下生成Util.dll等文件

4、编写jsp文件   index.jsp

<%@ page import="com.jni.Util" %>

<html> <head></head>

<body> <h3>5+7=<%=Util.add( 5, 7 )%></h3> </body> </html>

5、把Util.dll文件复制到D:\apache-tomcat-6.0.29\bin目录下

6、部署Web项目

7、在ie中输入

http://localhost:8080/TestDll/index.jsp,若界面上能看到5+7=12就表示成功了

参考文章:http://blog.csdn.net/bintime/article/details/2586505

时间: 2024-11-03 05:44:15

使用JNI,vs2010 生成dll, JSP中调用dll的相关文章

java中调用dll文件的两种方法

一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNative地址:http://www.jb51.net/article/35232.htm JNA方法: 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架

在VS2012中采用C++中调用DLL中的函数 (4)

这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人Blog在C++中调用DLL中的函数(1)(2)(3) 但是问题出现了,上面讲述的步骤很详细但是在自己运行的时候却会出现错误,于是今天在使用google“vs2012 c++调用dll”时,发现了一篇MSDN上的指南:http://msdn.microsoft.com/zh-cn/library/m

在C++中调用DLL中的函数 (3)

1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等,它们都以源代码的形式发布.由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”.“白盒复用”的缺点比较多,总结起来有4点. 暴露了源代码:多份拷贝,造成存储浪费: 容易与程序员的“普通”代码发生命名冲突: 更新功能模块比较困难,不利于问题的模块化实现: 实际上,以上4点概

在C++中调用DLL中的函数

1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等,它们都以源代码的形式发布.由于这种复用是"源码级别"的,源代码完全暴露给了程序员,因而称之为"白盒复用"."白盒复用"的缺点比较多,总结起来有4点. 暴露了源代码:多份拷贝,造成存储浪费: 容易与程序员的"普通"代码发生命名冲突

在Jsp中调用静态资源,路径配置问题

在Jsp中调用图片.JS脚本等,针对取得的路径有两种调用方式: 1.放入Body中生成绝对路径(不建议) <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%    String path = request.getContextPath();    String basePath = request.getScheme()+":/

(转)在JSP中调用JAVA类和使用JavaBean有什么区别?

在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用JavaBean而其他类,可以和一般java中一样使用.  Bean的参数中还可以指定范围, <jsp:useBean  scope="application"   />该Bean在服务器的JVM中将只有一个实例. Bean是和WebServer相关的,不同的页面可以通过Bean 交

在VS2012中采用C++中调用DLL中的函数(4)

转自:http://www.cnblogs.com/woshitianma/p/3683495.html 这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人Blog在C++中调用DLL中的函数(1)(2)(3) 但是问题出现了,上面讲述的步骤很详细但是在自己运行的时候却会出现错误,于是今天在使用google"vs2012 c++调用dll"

在C++中调用DLL中的函数(3)

转自:http://www.cnblogs.com/woshitianma/p/3681745.html 1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等,它们都以源代码的形式发布.由于这种复用是"源码级别"的,源代码完全暴露给了程序员,因而称之为"白盒复用"."白盒复用"的缺点比较多,总结起来有

在C++中调用DLL中的函数(2)

转自:http://blog.sina.com.cn/s/blog_53004b4901009h3b.html 应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息. Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构.另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录, 2.进程的当前工作目录, 3.Windows系统