先来写一下Java的类代码:Sample1.java
点击(此处)折叠或打开
-
public class Sample1{
-
public native int intMethod(int n);
-
public native boolean booleanMethod(boolean bool);
-
public native String stringMethod(String text);
-
public native int intArrayMethod(int[] intArray);
-
-
public static void 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(new int[]{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
点击(此处)折叠或打开
-
/* DO NOT EDIT THIS FILE - it is machine generated */
-
#include <jni.h>
-
/* Header for class 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, jstring string)
-
{
-
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, jintArray array)
-
{
-
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