`
ynp
  • 浏览: 439495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异构语言交互访问 解决方案及例子(三)--利用JNA从Java调用C++

阅读更多
利用JNA从Java调用C++

************* 建立VC工程,创建dll *********
--》javaCallCpp.h
extern "C" _declspec(dllexport) void hello();
extern "C" _declspec(dllexport) int add(int first, int second);  

--》javaCallCpp.cpp
#include "javaCallCpp.h"
#include <iostream>

int add(int a, int b){
	return a+b;
}

void hello()   
{   
	printf("Hello World!\n");   
}  


************* 建立Java工程,调用dll *********
--》JavaCallCppService.java

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface JavaCallCppService extends Library {
	//javaCallCpp.dll 放到工程目录下才行(与.classpath一级),也可以放到C:\WINDOWS\system32下,放到classes下会报找不到库
	JavaCallCppService INSTANCE = (JavaCallCppService)Native.loadLibrary("javaCallCpp", JavaCallCppService.class);
    public int add(int a, int b);  
    public void hello();
}


--》JavaCallCppTest.java

public class JavaCallCppTest {
         public static void main(String[] args) {
        	 System.out.println(JavaCallCppService.INSTANCE.add(1,2));
        	 JavaCallCppService.INSTANCE.hello();
         }
}


************* 需要注意的地方 *********
--》javaCallCpp.dll 放到工程目录下才行(与.classpath一级),也可以放到C:\WINDOWS\system32下,放到classes下会报找不到库;

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'javaCallCpp': 找不到指定的模块。

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:169)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:242)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:368)
at com.sun.jna.Native.loadLibrary(Native.java:353)
at JavaCallCppService.<clinit>(JavaCallCppService.java:5)
at JavaCallCppTest.main(JavaCallCppTest.java:4)

--》在头文件中必须为每个要公开调用的方法声明 extern "C" _declspec(dllexport),否则会java调用报找不到这个函数

参考:http://blog.csdn.net/shadowsick/article/details/9101477#
http://blog.csdn.net/shendl/article/details/3589676/
http://wen866595.iteye.com/blog/974826
分享到:
评论

相关推荐

    jna调用C++dll

    Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生API...通过学习和实践这个"jna调用C++ dll"的例子,你将能够熟练地处理跨语言的交互,包括处理回调函数这样的高级特性。

    java使用(jna)调用c/c++第三方动态库 dll文件 所用jar包

    Java 使用 JNA(Java Native Access)调用C/C++编写的第三方动态库(DLL文件)是一种常见的技术,它允许Java程序直接与本地操作系统接口交互,而无需编写JNI(Java Native Interface)代码。JNA 提供了一种相对简洁...

    jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包

    jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包 JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna)。JNA提供一组Java工具类用于在运行期动态...

    java jna 调用pytorch c++模型推理

    Java JNA调用PyTorch C++模型推理是一种在Java应用程序中利用PyTorch的深度学习能力的方法。JNA(Java Native Access)是Java平台上的一个库,它允许Java代码直接调用本机库(如C++编写的库),而无需编写JNI(Java ...

    JNA 调用dll jna调用 c++

    在标题和描述中提到的“JNA调用dll jna调用c++”是指利用JNA来调用Windows系统中的动态链接库(.dll)文件,这些.dll文件通常由C++或其他支持编译为本地代码的语言编写。 本文将详细介绍如何使用JNA进行dll调用,并...

    JNA调用C++动态库,传入二维数组,通过C++返回二维数组,java调用C++完整案例

    在Java编程中,有时我们需要与C++库进行交互,特别是在处理底层系统操作或者利用已有的C++库资源时。Java Native Access (JNA) 是一个非常实用的框架,它允许Java程序直接调用本地(Native)代码,无需编写JNI(Java ...

    jna-4.2.2.jar jna-platform-4.2.2.jar

    标题中的"jna-4.2.2.jar"和"jna-platform-4.2.2.jar"是Java Native Access (JNA)框架的两个关键组件的版本号为4.2.2的JAR文件。JNA是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需...

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

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

    c++ 代码实现 dll 工程 用于java jna调用

    在IT行业中,跨语言通信是常见的需求之一,Java与C++的交互就是一个典型的例子。本教程将详述如何使用C++编写DLL动态链接库,并通过Java的Java Native Access (JNA)库进行调用,从而实现Java程序对C++功能的调用。 ...

    jna-4.0.0.jar (用于Java调用C++ DLL动态库)

    jna-4.0.0.jar (用于Java调用C++ DLL动态库)

    JNA例子包含jna.jar已经java调用JNA的例子

    Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码无需编写C/C++的JNI(Java Native Interface)代码,即可直接...对于任何需要与本地系统功能进行交互的Java项目,JNA都是一个值得考虑的解决方案。

    jna-platform-4.3.0-API文档-中文版.rar

    Java Native Access (JNA) 是一个Java库,允许Java程序与本地平台API进行交互,而无需编写JNI(Java Native Interface)代码。JNA Platform是JNA的一个扩展,提供了对特定操作系统功能的访问,特别是针对Windows、...

    JNA文件包-java调用c++

    这个文件包专注于讲解如何使用JNA来调用C++函数,这对于那些需要利用C++库功能但又希望保持Java应用程序的跨平台特性的开发者来说,是非常有用的。 首先,我们要理解JNA的基本工作原理。JNA通过映射Java方法到本地...

    JNA-Linux下java程序调用so库接口函数

    在Linux系统下,JAVA程序通过JNA技术实现调用C语言编程输出的so库接口函数,从而实现java程序与c程序之间的交互。

    jna-5.6.0.jar、jna-platform-5.6.0.jar

    总结来说,"jna-5.6.0.jar"和"jna-platform-5.6.0.jar"是Java开发者调用C++ DLL文件的关键工具,它们提供了一个高效、便捷的桥梁,使得Java程序能够充分利用本地系统的功能,而无需深入JNI的复杂性。这两个库不仅...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    ### 使用JNA替代JNI调用DLL,并解决内存溢出问题 #### 问题背景 在项目的开发过程中,常常遇到需要处理二进制流数据并对其进行解析处理的情况。这种情况下,如果上层应用平台采用的是Java开发,而底层算法或数据...

    C++头文件转JAVA JNA接口类

    swig -java -c++ mycppheader.i ``` 这将会生成两个文件:`mycppheader_wrap.cxx`(编译成动态链接库的源码)和`mycppheader.java`(JNA接口类)。 4. **编译动态链接库**:使用C++编译器(如g++或MSVC)编译`...

    java jna 调用dll例子

    通过学习和理解这个例子,开发者可以掌握如何在Java应用中利用JNA来与不同平台的本地库进行交互,这对于跨平台的开发工作尤其有价值。同时,也能了解如何使用大华SDK进行视频播放和其他监控设备相关的功能开发。

    java用JNA调用dll实例,包含各种参数调用

    Java语言在与操作系统底层交互时,通常会遇到需要调用动态链接库(DLL)的情况,尤其是在Windows平台上。Java Native Access(JNA)是Java平台上的一个开源库,它提供了直接调用系统DLL函数的能力,无需编写C代码...

    java调用c++生成so库

    在Java编程环境中,有时我们需要利用C++的高性能特性来处理特定任务,比如访问硬件设备、进行底层优化等。这时,我们可以使用Java Native Interface (JNI) 来实现Java代码与C++代码的交互。JNI允许Java应用程序调用...

Global site tag (gtag.js) - Google Analytics