1.编写java类
package com;
public class TestDll {
static {
System.loadLibrary("test");
}
public native void sayHello(String msg);
public static void main(String[] args) {
new TestDll().sayHello("hello");
}
}
2.编译成class
3.调用javah生产头文件(.h)
调用javah文件时,需要在cmd命令行模式里面进入bin文件夹,里面存放着工程中所有的.class文件。随后调用:javah -classpath . -jni 包名.类名。
例:
javah -classpath . -jni com.TestDll
4.生成test.dll
a) VS2010
1:新建一个工程test,选择Win32工程,next
2:选择dll工程 finish就可以了
3:删除test.cpp文件,将TestJNI.h添加为工程头文件,先将com_TestDll.h拷到工程目录下,然后在header files 文件夹右键--->add --->existing item,将com_TestDll.h加入
4:打开StdAfx.h文件,再最后面添加:
#include "com_TestDll.h"
5:编辑StdAfx.cpp,加入
JNIEXPORT void JNICALL Java_com_TestDll_sayHello
(JNIEnv * evn, jobject obj, jstring message)
{
printf("call c++ ok");
}
6:打开工程属性,选择Configuration Properties --->VC++ Directories--->include Directories 添加jdk路径下的include和/include/win32目录,这里包含jni.h等头文件,如果不包含这两个目录,工程中的#include<jni.h>将无法找到所包含的文件
7:build工程,打开工程目录的debug目录,将其中生成的test.dll复制到eclipse工程的根目录即可,运行TestDll,控制台显示call c++ ok
b)VS2005
6:Tools->Options->Projects and Solutions->VC++ Directories,in the drop down select "include files" and add an entry there...(jni.h)
c)VC6
1:新建一个项目test, 项目类型为Win32 Dynamic-Link Library。点击OK
2:在弹出的窗口中选择A simple DLL project,点击Finish。
3:打开项目所在的文件目录,将生成的com_TestDll.h文件复制到此目录。点击左边中间的FileView,切换到文件浏览模式。在Header Files上点击右键,选择Add Files to Folder…。选择com_TestDll.h文件,点击OK。
4:打开StdAfx.h文件,再最后面添加:#include "TestHello.h"
5:打开StdAfx.cpp,在最后面添加一段代码:
JNIEXPORT void JNICALL Java_com_TestDll_sayHello
(JNIEnv * evn, jobject obj, jstring message)
{
printf("call c++ ok");
}
6:在VC的菜单上选择Tools-Options…,打开选项对话框。在Directories文件夹,添加上jdk所在文件夹下的include和include\win32文件夹。
7:点击VC上的菜单项Build-Build All,在VC项目Debug文件夹中生成test.dll,复制到eclipse工程的根下。
分享到:
相关推荐
08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08_12_JNI_02_jni数据类型&属性方法08...
08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存策略08_17_JNI_04_JNI引用&缓存...
android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build
通过这个"JNI入门Demo3.0",我们可以深入理解动态注册Native函数的概念和实现,从而在实际项目中更灵活地使用JNI。需要注意的是,动态注册虽然方便,但也需要谨慎处理,因为它可能会引入运行时错误,如方法签名不...
JNI(Java native interface)入门知识
### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...
### JNI入门教程详解:HelloWorld篇 #### 一、引言与背景 Java Native Interface (JNI) 是Java语言与本地代码交互的桥梁,允许Java应用调用C或C++等本地语言编写的代码,这对于扩展Java功能、提高性能或集成已有非...
Android Studio的JNI(Java Native Interface)开发入门教程 JNI,全称为Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中扮演着重要角色,尤其当...
打开VS2010,选择“新建”>“项目”,然后在模板列表中找到“Win32控制台应用程序”。在“应用程序设置”对话框中,确保选中“动态库(.dll)”选项,然后点击“完成”。 在生成的项目中,我们将添加JNI头文件和...
JNI_VC6_Opencv做的图片转视频dll,其中的def有输出函数名,可以修改;在VC6下可直接编译通过;直接在eclipse中配置好后可以直接调用生成的dll。 遇到这方面需求,可以寻求帮助:415926459
总结起来,"JNI_Demo.rar"是一个关于如何在Java程序中使用JNI调用由VC6.0生成的DLL的教程。这个DEMO通过具体的代码示例展示了JNI的工作原理和实现过程,对于学习和理解JNI技术具有很好的参考价值。
这个"Android JNI入门Demo"是一个适合初学者了解和学习JNI基础操作的实践项目。 在Android开发中,JNI的应用场景广泛,例如:提升性能的关键算法实现、调用系统库、访问硬件设备、游戏开发中的图形渲染等。下面将...
Java Native Interface的入门级学习demo,完美的解决了java.library.path中找不到动态库的问题,并解决了windows和linxu的兼容问题,使得这个项目打包成jar包后,能够直接在windows或Linux的java代码中调用
jni示例vs2005 c++实现,有c++项目源文件,供大家参照,在java目录中直接运行,java TestJni 出效果!
### JNI入门初级教程知识点概述 本教程旨在为初学者提供JNI(Java Native Interface)的基础知识与实践指导。JNI是Java平台的一部分,它允许Java代码与其他语言编写的代码进行交互,尤其是C和C++。这对于利用现有C...
通过学习和实践这个JNI入门Demo1.0,你可以掌握JNI的基本用法,包括声明`native`方法、生成头文件、编写C++代码以及构建和加载动态库。这将为你进一步探索Android的原生开发打下基础,比如使用C++提升性能、接入第三...
本教程"JNI入门Demo2.0"将带你深入理解JNI的使用,特别是如何通过JNI反调用Java方法。 1. **JNI基础知识**: - JNI接口定义了Java虚拟机(JVM)和本地代码之间的通信规范,包括函数调用、数据类型转换、异常处理等...
Java JNI(Java Native Interface)是Java平台中一个重要的特性,它允许Java代码和其他语言写的代码进行交互。JNI自Java 1.1版本引入以来,已经成为Java开发者与底层系统交互的重要工具,尤其在需要调用C/C++库或者...