`

使用 JNI 调用 c 的 DLL

    博客分类:
  • temp
阅读更多
按照 http://java.sun.com/j2se/1.3/docs/guide/jni/ 上面的方法和步骤, 创建一个 HelloWorld,
1. 写一个类 HelloWorld(注意,不是在别的 Package 下面)
public class HelloWorld {
public native void displayHelloWorld();

static {
System.loadLibrary("helloworld");
}
   
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}

2. javac  HelloWorld

3. javah -jni HelloWorld

4. 创建一文件 HelloWorld.cpp (或者 HelloWorldImp.c)
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
    printf("Hello world!\n");
    return;
}
5. 编译 , 用 VC 或者 gcc 的命令
D:\aa>cl -IE:\Sun\AppServer\jdk\include -IE:\Sun\AppServer\jdk\include\win32 -LD
HelloWorld.cpp -Fehelloworld.dll

6. 运行
D:\aa>java HelloWorld
Hello world!

好了, 现在把 HelloWorld 放在一个 package 里面,如: com.company.HelloWorld.java,就不行了
D:\aa>java eg.HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld
        at eg.HelloWorld.displayHelloWorld(Native Method)
        at eg.HelloWorld.main(HelloWorld.java:17)

同样的结果出现在 eclipse 的开发环境中

解决问题
javah -jni com.company.HelloWorld

然后,生成 com_company_HelloWorld.h
运行:
D:\aa>java com.trumptech.cron.HelloWorld
Hello world  !
分享到:
评论

相关推荐

    JAVA通过JNI调用C#dll的整个项目工程

    Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...

    Java通过JNI调用DLL动态库

    Java通过JNI调用DLL动态库,亲测试编写

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

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

    Java通过JNI调用C++的DLL文件.docx

    JNI 将 Java 应用程序与 C++ DLL 文件集成需要以下步骤:创建一个 Java 工程,生成 `.class` 文件,使用 `javah` 命令生成 `.h` 头文件,创建一个 C++ 工程,并将生成的 `.h` 头文件复制到工程中,编写 C++ 代码,并...

    JAVA项目JNI调用dll实现DEMO源码,C++&JAVA

    完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...

    java使用JNI调用C++ dll库用法概述

    Java使用JNI(Java Native Interface)调用C++ DLL库是一种常见的技术,特别是在需要利用Java的跨平台特性同时利用C++的高效性能时。JNI提供了一种桥梁,使得Java代码能够直接与本地代码交互,比如C++编译的动态链接...

    JAVA JNI调用DLL完整步骤

    总结,Java调用DLL的完整步骤包括:定义Java的`native`方法,使用`javah`生成头文件,编写C/C++ DLL代码,编译DLL,最后在Java程序中调用。这个过程可能需要对JNI规范有深入理解,以及一定的C/C++编程基础。通过熟练...

    Java JNI调用DLL方法

    总结起来,Java JNI调用DLL主要涉及以下步骤: 1. 定义Java本地方法。 2. 使用`javah`生成C/C++头文件。 3. 在VC项目中实现头文件中的函数,引入必要的库和头文件。 4. 编译生成DLL库。 5. 设置Java的`java.library....

    在windows中jni(生成dll)Linux中jni(生成so),java调用曾c++

    在本主题中,我们将深入探讨如何在Windows和Linux环境中利用JNI来生成动态链接库(DLL for Windows,SO for Linux),并使Java能够调用C++编写的函数。 1. **Java调用C++的基本原理** - JNI为Java应用程序提供了一...

    jni调用第三方dll最简单的实例

    总结来说,这个实例展示了如何使用JNI调用第三方DLL的基本步骤:在Java中声明native方法,生成JNI头文件,实现C/C++代码并调用DLL函数,最后编译生成本地库。虽然这是一个简单的例子,但理解这些基本概念对于深入...

    Java JNI例子-创建DLL、项目导入DLL、IDEA配置JNI、JNI调用DLL(该DLL同时依赖第三方DLL)

    Java JNI例子-创建DLL、项目导入DLL、IDEA配置JNI、JNI调用DLL(该DLL同时依赖第三方DLL)

    jni调用c++ delphi中的dll.

    JNI(Java Native Interface)是Java平台提供的一种标准接口,用于在Java...通过以上步骤,你就可以成功地在Java程序中通过JNI调用C++和Delphi编写的DLL函数了。这在需要利用现有本地库或执行低级操作的场合非常有用。

    java运用jni调用dll实现屏蔽系统热键和任务栏

    Java使用JNI调用DLL来实现系统热键屏蔽与任务栏隐藏是一种跨平台编程技术的应用,主要涉及Java的本地接口(JNI)和Windows API。本文将深入解析这一技术的关键点,并提供相关的知识背景。 首先,JNI(Java Native ...

    java写的一个使用jni调用c/c++的dll

    本文将深入探讨如何使用Java通过JNI调用C/C++编写的DLL动态链接库。 首先,JNI提供了一个标准的方法,让Java代码可以与本地代码交互,如C/C++。在Java程序中,我们定义`native`方法,这些方法的实现不在Java字节码...

    JNI调用第三方dll实例

    在本实例中,我们将深入探讨如何使用JNI调用第三方DLL(动态链接库)文件,这是在Java应用程序中利用C++或C代码能力的常见场景。这个实例是在Visual Studio 2010环境下构建的,但请注意,其他环境可能需要不同的配置...

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

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。...对于初学者,这是一个很好的实践教程,即使没有Java背景,也能通过提供的步骤理解和实践JNI调用DLL的过程。

    springboot+jna/jni调用动态so/dll库

    在这种情况下,"springboot+jna/jni调用动态so/dll库"是一个重要的主题,它涉及到Spring Boot应用如何利用Java Native Interface (JNI) 和 Java Native Access (JNA) 这两种技术来调用操作系统级别的动态链接库(.so...

    JNI调用C语言代码示例

    使用java调用c语言编写的so/dll/sl文件。使用java调用c语言编写的so/dll/sl文件。详细介绍: http://blog.csdn.net/liu251/archive/2009/03/03/3953906.aspx 如果有疑问,可以给我留言。

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

    下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,使得Java代码能够调用本地代码(如C和C++),反之亦然。JNI接口包括了各种函数,让开发者可以...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    例如,`java jni调用so中的函数api.txt`中可能包含了具体的JNI函数调用示例。 其次,JNA是一种更高级的接口,它提供了更简洁的方式来调用本地库,无需编写C/C++代码。JNA通过映射Java方法到本地函数,减少了编程...

Global site tag (gtag.js) - Google Analytics