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

java访问c/c++

  • 1.创建native方法
    public  native static String getStringFromC(int i);
    //非静态的方法  使用对象调用
    public native String getStringFromC2();
  • 2.使用javah命名去生成.h头文件

  使用dos命令进入项目src目录下面,然后使用   javah +包名+类名   命令生成头文件刷新项目
这里写图片描述

生成的.h文件

  • 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");
};

猜你喜欢

转载自blog.csdn.net/u014749668/article/details/52972637