教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 脱掉JNI的外衣(-)

脱掉JNI的外衣(-)

发布时间:2018-11-07   编辑:jiaochengji.com
教程集为您提供脱掉JNI的外衣(-)等资源,欢迎您收藏本站,我们将为您提供最新的脱掉JNI的外衣(-)资源
 
脱掉JNI的外衣
<span>     </span>
我们都知道java是一种跨平台语言,而且是一种完全oo的语言,在本身的语言特性上也是使用非常的方便易用,所以是大多项目优先选用的一种开发平台,尤其在处理业务性比较强的系统上更是开发的迅捷便利,那么它也有一些缺憾,在处理本地方法的时候很乏力,因为我们不能够直接对内存直接操作,内存管理都是通过JVM来处理的.因此对于底层开发来说并不是一个好的选择,因此我们在涉及到底层开发的时候会用c/c 来处理,那么如果在一个业务系统中,有部分子系统需要调用底层的应用,或者第三方提供的底层控件那么我们如何处理呢(比如说社会保险中医疗子系统中需要读取用户的卡信息)?JNI是我们的一个好选择.
 
<span>一个简单jni</span><span>调用</span>
首先如果要在java中定义一个本地方法需要对于这个方法加上关键字native,那么我们举个例子,定义一个方法名字叫dosoming,在java中如下表示
<span style="FONT-SIZE: 10pt; COLOR: black">    </span><span style="FONT-SIZE: 10pt; COLOR: #7f0055">public</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055">native</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055">void</span><span style="FONT-SIZE: 10pt; COLOR: black"> dosoming();</span>
当然定义这个本地方法后是要实现它的,那么我们在c 中需要创建.h和.cpp两个文件,在jdk中提供了我们一个工具,可以协助我们生成.h文件.在jdk bin目录下的javah.exe.注意在使用它的时候我们需要切换到classpath下然后输入命令,需要把class文件的完整的包路径输入进去,格式如下
Javah test.jni.JNITest
这样在我们的目录下就会生成一个根据包路径命名的一个.h文件,在我例子中是test_jni_JNITest.h,里面会把在java中所有定义为native的方法包含在.h文件中,函数原型如下
JNIEXPORT void JNICALL Java_test_jni_JNITest_dosoming
 (JNIEnv *, jobject);
我们用vc 6.0新建一个动态库win32的控制台工程,把test_jni_JNITest.h加入进来,再根据函数原型,我们再新建一个cpp文件,里面简单写个简单的控制台输出,并且把头文件包含进来.
JNIEXPORT void JNICALL Java_test_jni_JNITest_dosoming(JNIEnv * env, jobject obj)
{
<span>               cout<<”http://blog.111cn.net/zxm0412”<<endl;</span>
}
编译工程,会提示找不到jni.h和jni_md.h这是因为没有吧.h文件include到工程里面来,在tool->options->directories下可以设置.编译通过后我们生成一个dll文件,需要把这个dll文件放到系统path路径下,这样我们的java程序就能够找到它了
Java调用端的代码如下
<span style="FONT-SIZE: 10pt; COLOR: #7f0055">public</span><span style="FONT-SIZE: 10pt; COLOR: #7f0055">static</span><span style="FONT-SIZE: 10pt; BACKGROUND: silver; COLOR: #7f0055">void</span><span style="FONT-SIZE: 10pt; COLOR: black"> main(String[] args)</span>
<span style="FONT-SIZE: 10pt; COLOR: black">    {</span>
<span style="FONT-SIZE: 10pt; COLOR: black">        JNITest test = </span><

您可能感兴趣的文章:
脱掉JNI的外衣(-)
photoshop制作逼真衣服皱褶效果教程
电脑IE浏览器总是提示“网页脱机提示”问题解决方法
jni和C 通信中文乱码问题的解决办法
C#就是Java只不过差了一点点
photoshop设计古装人物场景插画制作教程
css入门教程
Java Jni调用并编写dll详细教程
Django如何自定义信号
分享8个PHP开发常用代码片段

[关闭]
~ ~