java 调用C++ 动态链接库

本文介绍如何使用Java调用C++动态链接库(DLL),包括创建Java类、生成JNI头文件、编写C++代码及生成DLL,并在Java环境中调用DLL中的方法。

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

首先,建立一个类。

 

package jniTest;

public class TestDLL {

  public native int add(int num1, int num2); //native, java调用C++动态链接库关键字 add方法是动态链接库里的方法。
 
  static{
   System.loadLibrary("SayDLL");  //SayDLL 是动态链接库名称。
  }
}

 

然后用 javac 进行编译 生成TestDLL.class 文件,然后 输入 javah -jni TestDLL 生成 jniTest_TestDLL.h 文件 。

请看一下这个文件的名字,它是由 包名_类名合成的。h文件。

文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jniTest_TestDLL */

#ifndef _Included_jniTest_TestDLL
#define _Included_jniTest_TestDLL
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jniTest_TestDLL
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_jniTest_TestDLL_add
  (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

 

上面的内容是由javah 编译时自动生成的,然后把这个文件 拷贝到C++开发环境里新建的工程下。

因为C还要调用javajdk里面别的.h文件,所以最好把java jdk和C的开发环境装在一个电脑上。

我用的是Visual Studio ,点新建项目,先C++,然后点右侧 win32 DLL  项目名称为 SayDLL ,打开SayDLL.cpp文件属性页,点C++,常规,在右侧附加包含目录里添加java jdk 下 include目录和win32目录。如:D:/Program Files/Java/jdk1.6.0/include;D:/Program Files/Java/jdk1.6.0/include/win32;这两个目录。然后在SayDLL.cpp里输入以下内容:

 

// SayDLL.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "jniTest_TestDLL.h"

JNIEXPORT jint JNICALL Java_jniTest_TestDLL_add
  (JNIEnv * env, jobject obj, jint num1, jint num2)
{
        return num1 * num2;
}

作为例子,我只做了个乘法运算。然后生成dll

 

把dll放在java搜索的目录下,搜索目录我下面有代码。 然后在java里新建一个类,测试:

 

package jniTest;

public class TestSayDLL {

 /**
  * @param args
  */
 public static void main(String[] args) {
  //System.out.println(System.getProperty("java.library.path"));  //这个输出就是java的搜索目录,不清楚的可以打印一下看看。
  TestDLL test = new TestDLL();
  System.out.println(test.add(2, 3));

 }

}

 

运行之后,java输出台就会输出 6;完毕。

 

java搜索目录:D:/Program Files/Java/jdk1.6.0/jre/bin;.;

C:/WINDOWS/Sun/Java/bin;

C:/WINDOWS/system32;

C:/WINDOWS;

D:/Program Files/Java/jdk1.6.0/bin;

D:/Program Files/Java/jdk1.6.0/lib;

C:/WINDOWS/system32;

C:/WINDOWS/System32/Wbem;

C:/Program Files/Microsoft SQL Server/90/Tools/binn/
根据每个电脑的配置不同,这个目录不尽相同,不过大体是一个的,除了win的默认目录,就是java的目录。最好放在java目录里面。如第一行的jre/bin目录里面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值