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"); };
相关文章推荐
- 比较Java和C++的访问控制语法
- JNI编程(Java访问C/C++ DLL)的大致步骤
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- c++与java访问符区别
- C++和java对于 "多态 访问权限"的区别
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- 别再羡慕c++ 11了,java马上也有原子方法访问变量了
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- chap 17:当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- 四、(2)C++访问Java的String字符串对象
- [导入]JNI编程(Java访问C/C++ DLL)的大致步骤
- 利用JNA使Java访问本地C++
- C++和Java的属性访问和方法调用 效率比较
- public,private,protected访问权限在Java,C++中的解析
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- Java(JNI)代码访问本地代码C、C++
- JAVA访问C++动态库的方法
- 比较Java和C++的访问控制语法
- C++与Java的访问权限修饰符
- public,private,protected访问权限在Java,C++中的解析