`

JAVA 与C++ 混合编程 Java中调用C/C++生成的DLL

阅读更多
 一、 生成C的头文件
  1. 编辑Main.java
  public class Main
  {
  public native static int getStrNum(byte str[], int strLen);
  }
  2. 生成头文件
  按win + r打开“运行”窗口,输入“cmd”,打开DOS控制台窗口。进入上面Main.java所在的目录中,输入:
  javac Main.java
  javah Main
  两条命令完成后会生成Main.h文件
  二、 生成DLL
  1. 新建空工程
  在VS中新建工程:Win32 Console Application,取名“MakeDLL”,选择空工程。新建后修改工程属性:
  (1) General中,将“Configuration Type”改为“Dynamic Library (.dll)”;
  (2) C/C++的General中,将“Additional Include Directories”添加两项:
  “C:Program FilesJavajdk1.5.0_06include”
  “C:Program FilesJavajdk1.5.0_06includewin32”
  根据你安装的JAVA路径而设置,这是因为在C/C++编译过程中要使用JAVA的jni.h等文件
  2. 将上面生成的Main.h添加入工程
  3. 新建一个新的文件main.cpp,代码如下:
  #include ’Main.h’
  #include ’string.h’
  JNIEXPORT jint JNICALL Java_Main_getStrNum(JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
  {
  jbyte *buffer = (*env).GetByteArrayElements(str, 0);
  buffer[strLen] = ’’; // 由于JAVA自动分配空间,需要传进来字符串长度参数
  jint len = strlen((char*)buffer);
  return len;
  }
  4. 按F7编译链接,生成MakeDLL.dll文件
  三、 JAVA调用DLL
  在JAVA中使用上面生成的DLL文件:
  1. 将MakeDLL.dll复制到与使用DLL的JAVA文件相同的目录下。
  2. JAVA文件的源代码:
  public class Main
  {
  static
  {
  System.loadLibrary(’MakeDLL’);
  }
  public native static int getStrNum(byte str[], int strLen);
  public static void main(String[] args)
  {
  Main instance = new Main();
  String str = new String(’haha’);
  int num = instance.getStrNum(str.getBytes(), str.length());
  System.out.println(num);
  }
  }
  总结:
  另外,JAVA与DLL函数的参数传递过程,考试,大提示像int类型的,可以直接从JNI函数参数列表中获取;而数组元素则要通过JNIEnv来获取:
  jbyte *buffer = (*env).GetByteArrayElements(str, 0); // str是参数列表中jbyteArray变量
  同理可以获取char[]的元素。
  函数返回时,可以直接用return语句返回。也可以设置参数列表中的变量指针来返回:
  (*env).SetByteArrayRegion(byteArray, 0, 128, byteArr);
  byteArray是参数列表中的jbyteArray变量,作为指针用来返回需要返回的信息;byteArr是jbyte*类型,里面存放的值是要返回的内容。
  其它的信息可以从Google或Baidu中通过查找“jni”或“java调用DLL”来查阅到。

本文转自http://www.examda.com/ncre2/JAVA/fudao/20081204/085424628.html
分享到:
评论

相关推荐

    使用JNI进行混合编程:在Java中调用C/C++本地库

    通过以上步骤,我们可以看到,JNI允许Java和C/C++代码无缝集成,实现了跨语言的混合编程。这不仅扩展了Java的功能,还能利用现有的C/C++库,提升程序性能。在实际项目中,我们应当注意内存管理、错误处理和平台兼容...

    JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单

    在Java程序中,通过`System.loadLibrary`加载生成的DLL,然后就可以调用C/C++实现的本地方法了。 7. **注意事项** - DLL的路径:确保Java能够找到DLL文件,可能需要设置系统路径或者将DLL放在Java的类路径下。 -...

    Java调用C++ API/dll示例程序

    完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接

    C#【必备技能篇】VS2019 使用C/C++ 生成DLL 文件,并用 C/C++、C#调用DLL

    在C#开发软件的过程中,要经常调用C/C++生成的dll,本文主要介绍用C/C++生成dll的步骤,以及用C/C++、C#两种语言实现dll的引用实现。本文使用的IDE是VS2019,文章通过具体实例进行讲解,大家可以跟着自己动手进行...

    JAVA调用C++/C#的DLL

    标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...

    swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

    最后,运行Java或C#应用程序,它们将通过SWIG生成的接口调用C++ DLL中的函数。 总结一下,本教程主要介绍了如何使用SWIG在Java和C#中调用C++编写的DLL,涉及到的知识点包括:SWIG工具的使用,C++ DLL的创建,接口...

    java调用c++生成dll

    在Java中调用C++生成的DLL,我们首先需要编写C++的源代码,然后编译成动态库(即DLL文件)。 1. **C++源码编写**:创建一个C++源文件(如`native_function.cpp`),定义对外接口函数,这些函数会被Java代码通过JNI...

    非常好用java调用c++ dll文件demo

    Java调用C++ DLL文件是跨语言编程中的一个重要应用场景,特别是在既有Java代码库又有C++动态链接库的情况下。本文将详细讲解如何在Java程序中调用C++编写的DLL文件,以及一个可用的示例。 首先,理解Java与C++交互...

    java调用C++写的dll的实例

    Java调用C++编写的DLL动态链接库是跨语言交互的一种常见方式,主要利用了Java的JNI(Java Native Interface)技术。JNI允许Java代码与其他编程语言进行原生代码交互,包括C、C++等。本实例将详细讲解如何在Java项目...

    Java JNI 调用C++ API/dll 示例程序

    完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接。...

    C#与C++混合编程.pdf

    C#与C++混合编程涉及到将两种不同类型的代码(托管代码与本地代码)进行交互式调用,这是一个在软件开发中常见的需求。C#(发音为“看井”)是一种由微软开发的高级编程语言,它是一种面向对象、类型安全的编程语言...

    java调用c++ dll的示例

    本示例探讨的主题是如何在Java程序中调用C++编写的动态链接库(DLL)功能。这个过程通常称为JNI(Java Native Interface),它是Java平台标准版的一部分,允许Java代码和其他语言写的代码进行交互。 Java调用C++ ...

    C++ C#混合编程

    在提供的文件列表中,我们看到几个示例项目,如`AdR.Samples.CLRCallingNative`和`AdR.Samples.NativeCallingCLR`,这些示例可能是用来演示如何从C#调用C++代码,反之亦然。通过这些示例,开发者可以学习如何在实际...

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    JNI DEMO:java jni技术 调用 c/c++ 的dll

    在这个"JNI DEMO"中,我们将探讨如何使用JNI来调用C/C++编译生成的DLL(动态链接库)文件。 首先,我们需要了解JNI的基本工作原理。JNI为Java程序提供了一种机制,使得Java代码可以声明native方法,这些方法在Java...

    C#C++混合编程示例(C#调用非托管C++类)

    2. **定义C++导出**:由于C#不能直接调用C++类,所以C++类需要暴露为C风格的函数接口,这通常通过`extern "C"`和`__declspec(dllexport)`关键字实现。 3. **P/Invoke声明**:在C#中,你需要使用`DllImport`特性来...

    C++和Java混合编程

    在本场景中,我们关注的是C++和Java的混合编程,这是一个常见的需求,尤其是在需要利用C++的高性能特性和Java的跨平台优势时。本文将深入探讨C++和Java混合编程的关键知识点,包括互操作性、接口设计、编译配置以及...

    MATLAB与C_C++混合编程之MATLAB调用C程序

    在MATLAB中,为了提升程序执行效率,常常需要利用C或C++的高效计算能力,这就是MATLAB与C/C++混合编程的核心。本篇将详细解释如何在MATLAB中调用C程序,以及如何构建MEX函数。 首先,MATLAB本身并不包含C语言的...

    JAVA调用C/C++ DLL文件方法

    JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java Native Interface)是 Java ...

Global site tag (gtag.js) - Google Analytics