您的位置:首页 > 编程语言 > C语言/C++

java访问c/c++---开篇

2016-10-30 16:21 246 查看

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下)

![这里写图片描述](http://img.blog.csdn.net/20161030161030682)

![这里写图片描述](http://img.blog.csdn.net/20161030161300808 )

- 将生成的动态裤导入到java工程当中调用方法就可以运了

![这里写图片描述](http://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");
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: