zoukankan      html  css  js  c++  java
  • java类封装成dll

    @参考文章1@参考文章2@参考文章3

    1,建立测试类,注意英文注释部分,用汉语直接编译会乱码

    public class Hello {
        //native method is used for call other language procedure
        //if use chinese here then Compile would be gibberish
        public native void printHello();
        
        static{
            System.loadLibrary("HelloWorld");//加载生成的dll文件
        }
        
        public static void main(String[] args) {
            new Hello().printHello();
        }
        
    }

    2,编译

    javac Hello.java

    3,生成.h文件(.h文件为C语言的头文件,内含函数声明、宏定义、结构体定义等内容)

    javah Hello

    .h文件内容

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

    #ifndef _Included_Hello
    #define _Included_Hello
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
    * Class: Hello
    * Method: printHello
    * Signature: ()V
    */
    JNIEXPORT void JNICALL Java_Hello_printHello
    (JNIEnv *, jobject);

    #ifdef __cplusplus
    }
    #endif
    #endif

    4,编写HelloWorld.c文件(.c则为C语言的源文件,内含函数实现,变量定义等内容)

    #include "jni.h"
    #include "Hello.h"
    //#include other headers
    JNIEXPORT void JNICALL Java_Hello_printHello(JNIEnv *env, jobject obj)
    {
    printf("Hello world! ");
    return;
    }

    注意,jni.h为%JAVA_HOME%includejni.h,Hello.h是第3步生成的,Java_Hello_printHello中的Java_Hello_不能去掉

    5,下载安装mingw, 并将其安装目录配置到系统环境变量 

    mingw_64位最新下载地址:mingw_64位最新版下载地址
    该软件的作用是在windows系统使用gcc和g++命令,对c文件和c++文件进行编译,生成.o文件, 进而生成.dll文件。64位的只能生成64位的dll文件。若要生成32位的dll文件,请下载32位的mingw.
    mingw_32最新版下载地址:mingw_32位最新版下载地址
    安装完后将{minw安装目录}mingw64in放到path即可。

    安装成功截图:

    6,成功.o文件(注意HelloWorld.c的路径和mingw/bin的关系,要保证对应能找到对方)

    gcc -c -I"%JAVA_HOME%include" -I"%JAVA_HOME%includewin32" HelloWorld.c

    7,生成.dll文件(注意事项同6)

    gcc -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.o

    8,执行java命令, 验证是否成功。

    java Hello

    输出Hello World,成功!

    示例项目下载:forDll.rar(内含项目、.c.h.o.dll所有文件)

    插件mingw64位本人百度云下载:https://pan.baidu.com/s/12XGJYTYEJp0-bORB_UfRNA

  • 相关阅读:
    杭电2031进制转换
    杭电2033人见人爱A+B
    【转】到底怎么样才叫看书?
    方便单个实体更新的DbContext扩展方法,比如Edit页面
    使用Newtonsoft.Json
    代码配置 vs. 配置文件
    进程到创建
    C#+VBA 操作EXCEL(转)
    基于定位的社交应用Foursquare开源网址(wp7)
    深入理解计算机系统实验
  • 原文地址:https://www.cnblogs.com/yanan7890/p/9848400.html
Copyright © 2011-2022 走看看