Java学习篇之---JNI简单实现(续)

上篇文章中,在生成头文件的时候出了个岔子,好在功夫不负有心人,最终困难被克服了!

下面我接着来写步骤二的第9)步:

步骤二:

9)设置64位编译平台:

打开Microsoft Visual Stutio 2008--->File--->New--->Project...--->

OK--->Next--->

Finish后会生成一个空项目:

默认是采用Win32平台,而我的操作系统是64位的,所以:

点击Configuration Manager...

默认如下图所示:

new 一个新的platform:

到此为止,64位编译平台已经设置好。

10)用c++实现sayHello()方法并将源文件编译成sayhello.dll动态链接库:

将上篇文章中费了九牛二虎之力生成的头文件,拷贝到sayhello项目下:

选中sayhello项目下的Header Files--->右键Add--->Existing Item...--->选中上图中的com_ryze_jni_test_HelloWorld.h--->这样头文件就加入到了工程中:

点击可以看到头文件中声明了一个名字很长叫做Java_com_ryze_jni_test_HelloWorld_sayHello的函数,这个函数的命名规则是Java_包名_类名_方法名

接下来就是选中项目下的Source Files--->右键Add--->New Item...--->

新建一个名字为source的c++空文件

在空文件中写下代码如下:

#include<iostream>
#include"com_ryze_jni_test_HelloWorld.h"

using namespace std;
JNIEXPORT void JNICALL Java_com_ryze_jni_test_HelloWorld_sayHello(JNIEnv *, jobject){
	cout<<"Hello World !"<<endl;
}

然后打开头文件,将头文件中

改写成:

然后将JDK的include目录

C:\Program Files\Java\jdk1.7.0_45\include

下的jni.h和目录

C:\Program Files\Java\jdk1.7.0_45\include\win32

下的jni_md.h拷贝到项目源文件目录下

然后编译:

编译成功,此时在debug目录下生成我们需要的sayhello.dll文件:

11)将生成的sayhello.dll动态链接库加入到PATH环境变量下:

12)在java中调用动态链接库中的sayHello()方法:

时间: 2024-08-26 10:22:26

Java学习篇之---JNI简单实现(续)的相关文章

JAVA学习篇--JSTL基础

JSTL是什么 JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库. 为什么要用JSTL 我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet.表达式和声明)代码用来实现相关逻辑控制.看下面程序.但这样做会带来如下问题: jsp维护难度增加;出错提示不明确,不容易调试; 分工不明确;(即jsp开发者是美工,也是程序员); 最终增加程序的开发成本; <% if (session.getAttribute(

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

JAVA学习篇--Java类加载

由来: 与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序(解释性语言).当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Javaclass加载到JVM里头运行,负责加载Javaclass的这部分就ClassLoader.中文叫做类加载器. 类加载器就好比一个代理,你需要什么,我通过类加载器将你需要的内容返回给你! 类加载器有什么作用? 当程序需要的某个类,那么需要通过类加载器把类的二进制加载到内存中. 解释: 类加载器也是Java类,因为其他是java类的

JAVA学习篇--javaweb之Filter详解

在DRP项目中,多次提到了Filter,它解决了字符集的统一设置以及统一控制简单WebCache,从中我们可以体会到,它给我们带来的好处不仅仅是减少代码量这么简单,它的出现避免了我们每个页面重复的编写相同的代码,减少了我们的工作量,而且给维护带来了极大的便利,那么它是如何实现统一管理的呢?既然它能统一管理某些重复的操作,那么它和AOP有什么关系呢? Filter简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

JAVA学习篇--静态代理VS动态代理

本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢? 2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那么什么又是AOP? 下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对

JAVA学习篇--JSP实现原理

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难. 解决方案: 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java 

java学习篇(一)从网络下载图片

(1)在java中,通过网络,下载图片. import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 通过URL,从网络下载图片 * @author TF */ public class Imag

JAVA学习篇--JSTL基金会

JSTL什么 JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完好的开放源码的JSP标签库. 为什么要用JSTL 我们JSP用于开发信息展现页很方便;也能够嵌入java代码(scriptlet.表达式和声明)代码用来实现相关逻辑控制. 看以下程序.但这样做会带来例如以下问题: jsp维护难度添加;出错提示不明白.不easy调试; 分工不明白;(即jsp开发人员是美工,也是程序猿); 终于添加程序的开发成本; <% if (session.getAttribu