、 生成C头文件
1. 编辑Main.java
public Main
{
public native getStrNum( str, strLen);
}
2. 生成头文件
按win + r打开“运行”窗口输入“cmd”打开DOS控制台窗口进入上面Main.java所在目录中输入:
javac Main.java
javah Main
两条命令完成后会生成Main.h文件
2、 生成DLL
1. 新建空工程
在VS中新建工程:Win32 Console Application取名“MakeDLL”选择空工程新建后修改工程属性:
(1) General中将“Configuration Type”改为“Dynamic Library (.dll)”;
(2) C/CGeneral中将“Additional Include Directories”添加两项:
“C:Program FilesJavajdk1.5.0_06”
“C:Program FilesJavajdk1.5.0_06win32”
根据你安装JAVA路径而设置这是在C/C编译过程中要使用JAVAjni.h等文件
2. 将上面生成Main.h添加入工程
3. 新建个新文件.cpp代码如下:
# 'Main.h'
# '.h'
JNIEXPORT j JNICALL Java_Main_getStrNum(JNIEnv *env, j cls, jArray str, j strLen)
{
j *buffer = (*env).GetByteArrayElements(str, 0);
buffer[strLen] = ''; // 由于JAVA自动分配空间需要传进来串长度参数
j len = strlen((char*)buffer);
len;
}
4. 按F7编译链接生成MakeDLL.dll文件
3、 JAVADLL
在JAVA中使用上面生成DLL文件:
1. 将MakeDLL.dll复制到和使用DLLJAVA文件相同目录下
2. JAVA文件源代码:
public Main
{
{
.loadLibrary('MakeDLL');
}
public native getStrNum( str, strLen);
public void (String args)
{
Main instance = Main;
String str = String('haha');
num = instance.getStrNum(str.getBytes, str.length);
.out.prln(num);
}
}
整理总结:
另外JAVA和DLL参数传递过程像类型可以直接从JNI参数列表中获取;而元素则要通过JNIEnv来获取:
j *buffer = (*env).GetByteArrayElements(str, 0); // str是参数列表中jArray变量
同理可以获取char元素
返回时可以直接用语句返回也可以设置参数列表中变量指针来返回:
(*env).SetByteArrayRegion(Array, 0, 128, Arr);
Array是参数列表中jArray变量作为指针用来返回需要返回信息;Arr是j*类型里面存放值是要返回内容
其它信息可以从Google或Baidu中通过查找“jni”或“javaDLL”来查阅到
最新评论