Java调用C++编写的dll

6 篇文章 0 订阅

更多精彩内容,请见:http://www.16boke.com


by zxy,QQ群:168424095

(1)编写java代码JniDemo.java
class JniDemo
{
 public native void printHello();
 public native int add(int a, int b);

 static
 {
  System.loadLibrary("JniDllDemo");
 }

 public static void main(String[] args)
 {
  JniDemo demo = new JniDemo();
  demo.printHello();

  int a = 3;
  int b = 4;
  System.out.println(a + "和" + b + "的和是:" + demo.add(3, 4));
 }
}
(2)用javac JniDemo.java命令编译,生成JniDemo.class文件
(3)用javah JniDemo命令生成扩展名为.h的头文件   

如果JniDemo.java在D盘根目录下: javah -classpath D:\ -jni JniDemo 
(4)用C/C++生成动态链接库
以下为VS2005用C++语言生成动态链接库的步骤:
新建项目,名称:JniDllDemo ->Win32->Win32项目->下一步->应用程序类型选择:DLL,附加选项勾上:空项目->完成。
在JDK安装目录找到头文件jni.h和jni_md.h。笔者这两个文件路径是:
jni.h在C:\Program Files\Java\jdk1.6.0_10\include
jni_md.h在C:\Program Files\Java\jdk1.6.0_10\include\win32
将头文件jni.h,jni_md.h及刚刚生成的JniDemo.h添加到工程中,并添加JniDemo.cpp源文件,实现本地方法:
#include "JniDemo.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_JniDemo_printHello(JNIEnv *, jobject)
{
 cout<<"Hello!"<<endl;
}

JNIEXPORT jint JNICALL Java_JniDemo_add(JNIEnv *, jobject, jint a, jint b)
{
 return a+b;
}

生成Release版本JniDllDemo.dll
(5)将JniDllDemo.dll和JniDemo.class放在同一目录下,用java JniDemo命令运行可以看到输出:
Hello!
3和4的和是:7

源码下载:JniDemo


更多精彩内容,请见:http://www.16boke.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用C语言主要是通过JNIJava Native Interface)来实现的。JNI是一种Java应用程序与本地代码(如C或C++)进行交互的机制。 首先,需要编写一个C语言的共享库(也称为动态链接库或DLL)。在C代码中,使用`#include <jni.h>`包含JNI的头文件,定义一个`JNIEXPORT`修饰的方法,该方法会在Java中被调用。在这个方法中,可以执行C语言的操作,或者通过调用Java提供的JNI函数来与Java进行交互。 编写完C代码后,需要使用编译器将其编译成共享库文件。在Windows环境下,可以使用命令行运行`gcc -shared -o libexample.dll example.c`命令进行编译。在Linux环境下,可以使用`gcc -shared -o libexample.so example.c`命令进行编译。 在Java代码中,使用`System.loadLibrary()`方法加载已编译的共享库文件。然后,通过`native`关键字将Java方法声明为本地方法。在方法体内部,可以调用C语言的方法。 例如,假设C代码中定义了一个`JNIEXPORT void JNICALL Java_com_example_NativeExample_nativeMethod(JNIEnv *env, jobject obj)`方法,在Java中可以通过以下代码调用该方法: ``` class NativeExample { public native void nativeMethod(); static { System.loadLibrary("example"); } } public class Main { public static void main(String[] args) { NativeExample example = new NativeExample(); example.nativeMethod(); } } ``` 需要注意的是,调用C代码时需要处理好Java和C之间的类型转换和内存管理。JNI提供了一些函数来实现这些功能,如`GetMethodID()`、`CallVoidMethod()`和`GetArrayElements()`等。 总之,Java通过JNI调用C语言主要是通过编写C共享库,并使用JNI函数来与Java进行交互。通过合理使用JNI提供的函数,可以在Java调用C代码并实现更高效的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值