@参考文章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!\n");
return;
}

注意,jni.h为%JAVA_HOME%\include\jni.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安装目录}\mingw64\bin放到path即可。

安装成功截图:

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

gcc -c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 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

java类封装成dll的更多相关文章

  1. 将QT开发的界面程序封装成DLL,在VC中成功调用

    最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...

  2. C#封装成DLL,并在C#中调用

    一.C#封装成DLL 1.在VS中创建项目选择类库,命名 myDll 2.建立好项目后自动生成的代码如下: 代码修改如下,添加自己要封装的C#代码,注意修饰符必须为public using Syste ...

  3. 将QT开发的界面程序封装成DLL,在VC中成功调用(必须有消息循环,所以使用了QTWinmigrate,附CSDN可下载的Demo)

    最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...

  4. 使用DOS命令将类库封装成dll

    1.Windows键+R.输入cmd进入DOS 2.使用 cd  加路径找到需要封装成dll的类库文件 3.csc /target:library /out:dll的名字.DLL 需要封装的cs文件

  5. unity脚本封装成dll

    先申明一下这样做是有需要的.当我们需要把脚本提供给第三方使用,而又不希望对方看到具体的实现过程,这时候就需要将代码封装编译成dll文件,供第三方调用.或是多个项目都要用到同一个模块或同样的功能,则可以 ...

  6. 如何将.il、.res文件封装成dll文件

    将你的.il..res文件保存在你的硬盘上,如下图: 我存放的路径在E盘的test文件夹中,我们开始封装了咯.进入DOS命令,如下图: 我们通过DOS命令先进入.il..res文件目录,如下图: 然后 ...

  7. C#.NET常见问题(FAQ)-如何把写好的类编译成dll文件

    1 新建一个类库项目   2 直接改写这个Class1.cs文件   3 记得要添加Windows.Forms引用   4 我直接把在别的项目中做好的cs文件搞到这里来,连文件名也改了(FilesDi ...

  8. [转载]Java类打包成JAR文件

    原文传送门:http://www.2cto.com/kf/201204/129495.html 使用的工具及环境: MyEclipse 7.5 Java Enterprise.JDK1.6.0 打包J ...

  9. C#如何把写好的类编译成dll文件

    1 新建一个类库项目   2 直接改写这个Class1.cs文件   3 记得要添加Windows.Forms引用   4 我直接把在别的项目中做好的cs文件搞到这里来,连文件名也改了(FilesDi ...

随机推荐

  1. AJAX之发送GET请求

    用jquery发送get请求 function AjaxSubmit1() { $.ajax({ //用jQuery发送 url: '/app04/ajax1/', type: 'GET', data ...

  2. idea 执行maven 命令

    如果当前账号不是超级管理员,这边需要执行系统用户变量, 输入安装文件bin路径 参考:https://blog.csdn.net/qq_19167629/article/details/7958490 ...

  3. mui longtap 事件无效

    1.mui  的部分事件默认是关闭的 需要在init中单独配置事件开关 mui.init({ gestureConfig: { longtap: true, //默认为false } })

  4. vue.js 初级之一

    vue.js 是一个构建数据驱动的 web 界面 渐进式驱动框架. 引用的话,直接使用script标签引入就可以了: <script src="./lib/vue.js"&g ...

  5. ReactiveX 学习笔记(7)聚合操作符

    Mathematical and Aggregate Operators 本文的主题为处理 Observable 的聚合操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操 ...

  6. 福州大学软件工程W班-助教总结

    背景 福州大学软件工程W班,总人数46人,讲师汪老师. 前期期望 希望自己能够在课程当中起到引导作用,发挥助教最大的用处. 实际执行情况 第一个问题是自动化测试工具,该工具主要是用来测试程序WordC ...

  7. SQLServer 的数据分页:

    假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar(20))然后向里面插入大约1000 ...

  8. 在windows上通过ssh远程链接linux服务器[转]

    本文分别转自 [http://jingyan.baidu.com/article/6d704a130de40e28db51cab5.html] [http://www.cnblogs.com/mliu ...

  9. Python基础学习Day6 is id == 区别,代码块,小数据池 ---->>编码

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  10. 在maven中classpath notfund