Java调用C接口的简单示例
正好需要用到Java调用dll里的C接口,想到自己做个简单的例子。我们可能需要自己生成dll文件,下边介绍一下,详细的步骤。主要参考https://blog.csdn.net/bingjia103126/article/details/76640464
1、在本地新建一个文件夹,用于以后存放 c project
2、在Dev c++里面新建一个C语言的DLL项目,会自动生成必要的.h、.c以及其他文件。
2、如果不做任何修改,直接编译
3、在eclipse中创建一个project, 并创建一个java程序,注意导入依赖包jna-4.4.0.jar。
import com.sun.jna.Library;
import com.sun.jna.Native;
public class JNAExample {
public interface CLibrary extends Library {
CLibrary INSTANCE = Native.loadLibrary("world", CLibrary.class);
void HelloWorld();
}
public static void main(String[] args) {
CLibrary.INSTANCE.HelloWorld();
}
}
View Code
4、将dev-c++中编译的world.dll copy到eclipse project的bin目录中
5、运行JNAExample,下图为运行结果。
补充:如果想运行最简单的直接打印在标准输出的hello world,可以
1、修改.h和.c文件
hello.h
#ifndef _HELLO_H_
#define _HELLO_H_
#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif
DLLIMPORT void HelloWorld();
#endif
View Code
hello.c
#include "hello.h"
#include stdio.h
DLLIMPORT void HelloWorld()
{
printf("Hello, World! \n");
}
View Code
运行结果如下:
Java调用C接口的简单示例 相关文章
Java方法学习003方法的重载
方法的重载 例子: public static void main(String[] args) { int max = max(10, 20); //int更改为double就走第一个方法 //不改则为第二个int方法 System.out.println(max); } //比大小 public static double max(double num1,double num2){ double result=
ssh在本地调用远程主机上的命令,不登录远程主机shell
需求描述 : 在实际shell脚本的编写过程中,需要通过ssh远程执行一个命令,并返回执行的结果 简单来说,就是将命令发送到远程的主机上进行执行,但是并没有实际的登录到远程主机上。即通过 ssh的方式本地调用远程的命令。 实现方法 : 通过下面脚本测试通过s
Java方法学习001
Java方法 前两天去亲家家里了,没空更新 System.out.println() //System指一个系统的类 //out指输出对象 //println()指方法(这句话的意思是调用System类里的标准输出对象out中的方法println()) Java方法是语句的集合,它们在一起执行一个功能 方法是解决一
Java 装饰者模式
什么是装饰者模式 在不改变原对象的基础上,附加新功能,相比生成子类更加灵活 装饰者模式应用场景 动态给一个对象添加或撤销功能 优点 可以在不改变对象的情况下动态的扩展功能,可以使扩展的多个功能按想要的顺序执行,以实现不同的效果。 缺点 扩展类变多
javascript的小技巧
1.parseInt太小的数字会产生bug parseInt(0.00000000454); // 4 parseInt(10.23); // 10 2.计算 1 + null// 1 1 + undefined// NaN Number(null) // 0 Number(undefined) // NaN 3.实参 arguments 和形参会保持同步关系 function test(a, b, c) { console.lo
Javascript 数组对象常用的API
常用的JS数组对象API ES5及以前的Api ECMAScript5 为数组定义了5个 迭代方法 ,每个方法接收两个参数, 一个是每项运行的函数,一个是运行该函数的作用域对象(可选项),传入这些方法的函数会接收三个参数:数组项的值,该项在数组中的位置,数组对象本身。 /
IDEA插件:快速删除Java代码中的注释
背景 有时,我们需要删除Java源代码中的注释。目前有不少方法,比如: 实现状态机。该方式较为通用,适用于多种语言(取决于状态机支持的注释符号)。 正则匹配。该方式容易误判,尤其是容易误删字符串。 利用第三方库。该方式局限性较强,比如不同语言可能有
关于接口设计的一点想法
绘画的本地实现 假设我们正在创建一个程序。用JavaScrit画东西。 那么我们的代码可能是这样的: var canvas = document.createElement(canvas), canvas2D = canvas.getContext(2d); canvas.id = demo; canvas.style.cssText = position:fixed;top:0;left:0;z
Java程序员必须掌握的常用Linux命令
ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent)cd 切换目录touch 创建空文件vim / vi 创建/编辑文件 insert 编辑 :q 退出 :q! 强制退出 :wq 保
Java中Double保留后小数位的几种方法
最近做个小实验,其中一部分要求将表单提交的数据转换为double,这个功能其实很简单直接一句Double.parseDouble(request.getParameter("chinese").trim())就可以实现,但因为是统计成绩,所以需要保留小数点后两位,所以各种百度发现了很多解决方法,这里特