java 中如何调用vc++的dll

本文介绍如何从Java调用C++编写的DLL文件。通过编写Java类、使用javah生成头文件、创建C++ DLL工程并实现方法,最后在Java中调用这些方法,实现了跨语言的功能调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


     虽然java已经能够帮我们做了很多事情,几乎大部分的东西现在都可以用java来编写,但是有很多时候,用c++能够更好的实现系统的一些功能,因此,在java中调用c++编写的东西就显得十分的必要。这边文章将为你介绍用java调用vc++编写的工程的dll文件。


1.。编写java的类,这个类中System.loadLibrary()是加载动态链接库,SallyDLL是由c++产生的文件,等下将有介绍,
public native int add(int num1, int num2);是一个声明的方法,该方法的实现是由c++完成的,在java中可以跟一般
的方法一样调用。
  1. package testJNI.test;
  2. public class TestDLL
  3. {
  4.     static
  5.     {
  6.         System.loadLibrary("SallyDLL");
  7.     }
  8.     
  9.     public native int add(int num1, int num2);
  10. }
2..编译上面的类。我使用eclipse写的,自动编译,打开cmd,进入到java工程的bin下。
使用命令:javah -classpath . -jni testJNI.test.TestDLL
这时会生成.h文件:testJNI_test_TestDLL.h
.h文件内容如下:
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class testJNI_test_TestDLL */
  4. #ifndef _Included_testJNI_test_TestDLL
  5. #define _Included_testJNI_test_TestDLL
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10.  * Class:     testJNI_test_TestDLL
  11.  * Method:    testOutput
  12.  * Signature: (II)I
  13.  */
  14. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  15.   (JNIEnv *, jobject, jint, jint);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif
3..用vc++建立DLL工程,
   注:将testJNI_test_TestDLL.h    copy到工程下
       将jdk/include下的jniport.h   copy到工程下
       将jdk/include下的jni.h    copy到VC++安装目录下的include   如C:/Program Files/Microsoft Visual Studio   9.0/VC/include  下面

4..编写add方法的实现,新建testDll.cpp  代码如下:
  1. #include "stdafx.h"
  2. #include "testJNI_test_TestDLL.h"
  3. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  4.   (JNIEnv * env, jobject obj, jint num1, jint num2)
  5. {
  6.         return num1 + num2;
  7. }
5..Build C++工程,得到DLL文件,将文件的名改为,   SallyDLL.dll   以上面一致,并将dll文件放到jdk的bin中


6..测试,编写java测试代码  在java中调用c++
  1. public class TestDLLMain
  2. {
  3.     /**
  4.      * @param args
  5.      */
  6.     public static void main(String[] args)
  7.     {
  8.         // TODO Auto-generated method stub
  9.         TestDLL test = new TestDLL();
  10.         System.out.println(test.add(20, 30));
  11.     }
  12. }
可以看到输出为 50


通过上面的方法就实现了java调用c++编写的东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值