Java和C语言混合编程--Windows版
来源:互联网 发布:javascript:; 编辑:程序博客网 时间:2024/06/04 18:32
整个工程下需要的文件:
先来写一下Java的类代码:Sample1.java
点击(此处)折叠或打开
- public class Sample1{
- public nativeint intMethod(int n);
- public nativeboolean booleanMethod(boolean bool);
- public nativeString stringMethod(Stringtext);
- public nativeint intArrayMethod(int[] intArray);
-
- public staticvoid main(String[] args)
- {
- System.loadLibrary("SampleC"); //DLL库的名字(C语言Windows XP下)
- Sample1 sample= new Sample1();
-
- int square = sample.intMethod(5);
- boolean bool = sample.booleanMethod(true);
- String text = sample.stringMethod("java");
- int sum= sample.intArrayMethod(newint[]{1,2,3,4,5,6,7,8,13});
-
- System.out.println("intMethod: "+ square);
- System.out.println("booleanMethod:"+ bool);
- System.out.println("stringMethod:"+text);
- System.out.println("intArrayMethod:"+sum);
-
- }
-
- }
提供一个bat文件编译:JavaMakeUp.bat
点击(此处)折叠或打开
- set JAVABIN=D:\ProgramJava\Java\jdk1.6.0_30\bin
- set classpath=.;D:\ProgramJava\Java\jdk1.6.0_30\lib
- set PATH=%JAVABIN%
- javac -classpath -Xlint:unchecked -verbose *.java
- pause
然后双击 JavaMakeUp.bat:
就可以编译出Sample1.class。
Java还有一个强大功能就是根据.calss生成C和C++使用的.h文件文件:
指令如下:
>javah Sample1
生成的.h文件如下:Sample1.h
点击(此处)折叠或打开
- /*DONOT EDIT THIS FILE- itis machine generated*/
- #include <jni.h>
- /* Headerforclass Sample1*/
- #ifndef _Included_Sample1
- #define _Included_Sample1
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: Sample1
- * Method: intMethod
- * Signature:(I)I
- */
- JNIEXPORT jint JNICALL Java_Sample1_intMethod
- (JNIEnv *, jobject, jint);
- /*
- * Class: Sample1
- * Method: booleanMethod
- * Signature:(Z)Z
- */
- JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
- (JNIEnv *, jobject, jboolean);
- /*
- * Class: Sample1
- * Method: stringMethod
- * Signature:(Ljava/lang/String;)Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
- (JNIEnv *, jobject, jstring);
- /*
- * Class: Sample1
- * Method: intArrayMethod
- * Signature:([I)I
- */
- JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod
- (JNIEnv *, jobject, jintArray);
- #ifdef __cplusplus
- }
- #endif
- #endif
下面就是写C语言代码了:
使用VC++6.0编写和编译:
SampleC.cpp:
点击(此处)折叠或打开
- #include <stdio.h>
- #include <string.h>
- #include "Sample1.h"
- #if 1
- /*
- * Class: Sample1
- * Method: intMethod
- * Signature:(I)I
- */
- JNIEXPORT jint JNICALL Java_Sample1_intMethod
- (JNIEnv *env, jobject obj, jint num)
- {
- return num*num;
- }
- /*
- * Class: Sample1
- * Method: booleanMethod
- * Signature:(Z)Z
- */
- JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
- (JNIEnv *env, jobject obj, jboolean boolean)
- {
- return !boolean;
- }
- /*
- * Class: Sample1
- * Method: stringMethod
- * Signature:(Ljava/lang/String;)Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
- (JNIEnv *env, jobject obj, jstringstring)
- {
- const char *str=env->GetStringUTFChars(string, 0);
- char cap[128];
- strcpy(cap, str);
- env->ReleaseStringUTFChars(string, 0);
- return env->NewStringUTF(strupr(cap));
- }
- /*
- * Class: Sample1
- * Method: intArrayMethod
- * Signature:([I)I
- */
- JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod
- (JNIEnv *env, jobject obj, jintArrayarray)
- {
- int i, sum=0;
- jsize len = env->GetArrayLength(array);
- jint *body=env->GetIntArrayElements(array, 0);
- for(i=0; i<len; i++)
- {
- sum += body[i];
- }
- env->ReleaseIntArrayElements(array, body, 0);
- return sum;
- }
- #endif
VCMakeUp.bat:
点击(此处)折叠或打开
- set VCBIN=D:\Microsoft Visual Studio\VC98\Bin
- set INCLUDE=D:\Microsoft Visual Studio\VC98\Include
- set LIB=D:\Microsoft Visual Studio\VC98\Lib
- set JAVA_HOME=D:\ProgramJava\Java\jdk1.6.0_30
- set PATH=%VCBIN%
- cl /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32 /c*.cpp
- cl /LD /I$%JAVA_HOME%\include /I%JAVA_HOME%\include\win32*.obj /FeSampleC.DLL
编译出DLL运行既可。
运行指令:
>java Sample1
结果如下:
D:\NewLandWork_LANPENG\Lan_POS_LIB\Java-C>java Sample1
intMethod: 25
booleanMethod:false
stringMethod:JAVA
intArrayMethod:49
0 0
- Java和C语言混合编程--Windows版
- java c语言混合编程 jni
- Java与C语言混合编程
- 汇编语言和C语言的混合编程
- C语言和汇编混合编程
- MATLAB和C语言混合编程问题
- python和C语言混合编程实例
- 配置Matlab和C语言的混合编程环境(Windows环境下)
- C++&Java混合编程
- 汇编C语言混合编程
- 使用JNI进行Java与C/C++语言混合编程
- ARM中C语言和汇编语言混合编程
- 嵌入式C语言和汇编语言的混合编程
- 【实验】Arm汇编和C语言混合编程实验
- 关于C语言和汇编语言混合编程的一点思考
- 【C语言】混合编程中的export 、import和extern
- ARM汇编, C语言和汇编混合编程
- C语言和Fortran混合编程结构体传递参数
- java语言规范
- SQL(一)
- java练习1--随机产生13个0~51不同的随机数
- java_xml读取写入方法
- MD5算法C语言版
- Java和C语言混合编程--Windows版
- ECLIPSE导入已有源码
- C语言版 字符串转换为二进制
- 随机生成某几个汉字
- Linux应用开发学习01——Gcc编译器
- HashMap统计字符串出现的个数
- linux-C直接调用SO动态库和生成SO动态库的函数
- PMP复习笔记1:各种分解结构及相关知识点
- 项目管理知识之三大审计