vc6.0 java_eclipse和vc6.0实践native工程,java调用c++

使用eclipse创建一个工程,在工程下建立一个类TestNative.java,其中编写了4个native方法,这4个方法使用c++实现。TestNative.java代码如下:

public class TestNative{

private native int add(int x,int y);

private native int subtract(int x,int y);

private native int multi(int x,int y);

private native int divide(int x,int y);

static {

System.loadLibrary("Helloworld");

}

public static void main(String[] args) {

TestNative hh = new TestNative();

int x = 60;

int y = 5;

System.out.println("x = " + x + " y = " + y);

System.out.println("x + y = " + hh.add(x, y));

System.out.println("x - y = " + hh.subtract(x, y));

System.out.println("x * y = " + hh.multi(x, y));

System.out.println("x / y = " + hh.divide(x, y));

}

}

eclipse会自动编译成class文件。

启动dos窗口,进入刚刚建立的eclipse工程的bin(或者classes)目录,通过javah –jni TestNative生成TestNative.h文件。

0818b9ca8b590ca3270a3433284dd417.png

将%JAVA_HOME%/include/jni.h拷贝到VC6.0安装目录/VC98/Include/目录下。

进入VC6.0创建dll类型的空的工程。

0818b9ca8b590ca3270a3433284dd417.png

创建Helloworld.h文件,将刚才生成的TestNative.h文件内容拷贝过来,在编写对应的Helloworld.cpp文件,自己编写实现如下。

TestNative.h代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class TestNative */

#ifndef _Included_TestNative

#define _Included_TestNative

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: TestNative

* Method: add

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_add

(JNIEnv *, jobject, jint, jint);

/*

* Class: TestNative

* Method: subtract

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_subtract

(JNIEnv *, jobject, jint, jint);

/*

* Class: TestNative

* Method: multi

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_multi

(JNIEnv *, jobject, jint, jint);

/*

* Class: TestNative

* Method: divide

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_divide

(JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

TestNative.cpp代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include "TestNative.h"

/*

* Class: TestNative

* Method: add

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_add(JNIEnv *en, jobject obj, jint x, jint y)

{

return x+y;

}

/*

* Class: TestNative

* Method: subtract

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_subtract(JNIEnv *en, jobject obj, jint x, jint y)

{

return x-y;

}

/*

* Class: TestNative

* Method: multi

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_multi(JNIEnv *en, jobject obj, jint x, jint y)

{

return x*y;

}

/*

* Class: TestNative

* Method: divide

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_TestNative_divide(JNIEnv *en, jobject obj, jint x, jint y)

{

return x/y;

}

0818b9ca8b590ca3270a3433284dd417.png

编译工程,在Debug目录下生成了Helloworld.dll,将Helloworld.dll拷贝到eclipse目录下,运行TestNative.java即可,如下图。

0818b9ca8b590ca3270a3433284dd417.png

可以使用DllExp查看生成的dll文件中的方法是否正确,如下图,每个java方法都是以下划线开头的为正确的。

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值