java访问c/c++
- 1.创建native方法
public native static String getStringFromC(int i);
//非静态的方法 使用对象调用
public native String getStringFromC2();
- 2.使用javah命名去生成.h头文件
使用dos命令进入项目src目录下面,然后使用 javah +包名+类名 命令生成头文件刷新项目
- 3将生成的头文件添加打vs项目下面
然后进入vs 打开头文件,你会发现项目缺少两个头文件jni.h和jni_cm.h头文件,去jdk或者ndk当中去找到两个头文件,引入修改成本地就可以了
- 4实现头文件里面的方法
/*
* Class: com_jni_Jni
* Method: getStringFromC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC
(JNIEnv *, jclass, jint );
/*
* Class: com_jni_Jni
* Method: getStringFromC2
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC2
(JNIEnv *, jobject);
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC
(JNIEnv * env, jclass jcls,jint num){
return (*env)->NewStringUTF(env,"C string");
};
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC2
(JNIEnv * env, jobject jobj){
return (*env)->NewStringUTF(env, UTF(env```
`**重点内容**"C string2");
};
``
- 5.将vs调成生成动态库 dll(在window下)
![这里写图片描述](https://img-blog.csdn.net/20161030161030682)
![这里写图片描述](https://img-blog.csdn.net/20161030161300808 )
- 将生成的动态裤导入到java工程当中调用方法就可以运了
![这里写图片描述](https://img-blog.csdn.net/20161030161621778)
- 部分代码
- java部分
package com.jni;
public class Jni {
public native static String getStringFromC(int i);
//非静态的方法 使用对象调用
public native String getStringFromC2();
static {
System.loadLibrary("Project19");
}
public static void main(String[] args) {
Jni jni=new Jni();
System.out.println(getStringFromC(10000));
System.out.println( jni.get
}
}
- vs部分
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC
(JNIEnv * env, jclass jcls,jint num){
//WinExec("C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQScLauncher.exe",0);
//printf("%d",num);
return (*env)->NewStringUTF(env,"C string");
};
JNIEXPORT jstring JNICALL Java_com_jni_Jni_getStringFromC2
(JNIEnv * env, jobject jobj){
return (*env)->NewStringUTF(env, "C string2");
};