分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例
cfunction.h 代码
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int Sum(int ma, int mb);
int Sum1();
#ifdef __cplusplus
}
#endif
cfunction.c 代码
#include <windows.h>
#include <time.h>
#include "jni.h"
#include "cfunction.h"
int Sum(int ma, int mb)
{
return ma + mb;
}
int Sum1()
{
return 10;
}
JNIEXPORT jint JNICALL Java_test_Sum(JNIEnv *env, jobject obj, jint ma, jint mb)
{
return Sum(ma, mb);
}
JNIEXPORT jint JNICALL Java_test_Sum1(JNIEnv *env, jobject obj)
{
return Sum1();
}
cfunction.def 定义
LIBRARY "CLib"
EXPORTS
Sum @1
Sum1 @2
编译输出 Clib.dll
注意上面两个函数的命名:Java_test_Sum 和 Java_test_Sum1 在 java 中要调用的方法名其实是 Sum 和 Sum1 但是在 C定义的时候必须是: Java_+Java 的类名 + _方法名,所以这里需要大家配合
以下是 java 调用代码
//具体运行时间可将 Clib.dll 放在与执行程序相同的目录即可
//编译方式:javac test.java 编译之后即可运行: java test 输入输出一切正常!
//java 版本在windows各个平台上测试通过!
test.java 代码
class test {
public native static int Sum(int ma, int mb);
static
{
System.loadLibrary("Clib");
}
public native static int Sum1();
static
{
System.loadLibrary("Clib");
}
public static void main(String argv[])
{
System.out.println("结果如下:\r\n"+Sum(3,2)+"\n");
System.out.println("结果如下:\r\n"+Sum1()+"\n");
}
}
执行结果:
更多详情:>>http://kan.weibo.com/con/3639866932723815
完全由本人开发,有任何疑问,请联络:
QQ群:74965947, 72133568,27236303,16592133,204725117,204724518
分享:写了一个 java 调用 C语言 开发的动态库的范例的更多相关文章
- JAVA调用C语言写的SO文件
JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...
- 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成
写了一个java实体类,implements了Serializable接口,让serialversionUID自动生成方法: 1.点击类旁边的警告符号: 2.选择Add generated seria ...
- 3、Java调用C语言(JNA法)
这个方法挺方便的……(改写“二.Java调用C语言(JNative法)“的例子) 一.访问https://github.com/twall/jna ,下载jna-4.1.0.jar(版本不同名字不同) ...
- 师兄写的一个JAVA播放器的源代码(转)
师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...
- 通过搭建一个精简的C语言开发环境了解一个C程序的执行过程
一.如何搭建一个精简的C语言开发环境 准备:下载TC2.0,并解压,比如说“d:\tc2.0\tc”目录 1.在C盘建立一个目录minic c:\ md minic 2.从解压的目录中将以下文件拷贝到 ...
- 研究实验1_搭建一个精简的C语言开发环境(包含部分经典的前言)
综合研究: 在这部分内容中,将启示我们如何进行独立研究和深度思考(一定要注意这一点,相应的调整自己的学习思想).同时使我们: (1)认识到汇编语言对于深入理解其他领域知识的 ...
- C语言学习笔记--动态库和静态库的使用
1.C语言中的链接器 (1)每个 C 语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件. (2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正 ...
- Golang调用windows下的dll动态库中的函数
Golang调用windows下的dll动态库中的函数 使用syscall调用. package main import ( "fmt" "syscall" & ...
- Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件
Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...
随机推荐
- Java 标识符、数据类型、运算符
一.标识符 1.组成 首字母(字母,下划线,﹩)+其余部分(数字,字母,下划线,﹩) 2.命名规范 ①由大小写字母.下划线.数字.﹩ ②数字不能开头 ③标识符长度没有限制 ④标识符不能是关键字和保留字 ...
- Docker学习<一>--初体验Windows环境下安装
背景 今天想试用spring boot与jwt协议的实现,配套就需要使用redis,但redis似乎windows环境版本部署起来不是那么舒心,果断尝试使用docker. 下载 下载地址: 稳定版:h ...
- C#发送邮件
以下代码已用 .yeah .qq 以及本人公司邮箱测试通过,可多发,可挂附件 本次测试邮件发送类,是用的winform 页面如下 窗口的后台代码如下: using System; using Syst ...
- ActionBarSherlock环境搭建
1.在官网http://actionbarsherlock.com/下载ActionBarSherlock包解压到. 2.创建自己的Android工程: 3.File -> New -> ...
- android开发学习笔记001a
Android 应用与开发环境 1.使用SDK版本:Android 2.3 . 2.发展和历史 创始人:Andy Rubin,Android公司被Google收购.07年11月5日1.0发布. 3.平 ...
- SQL数据库
SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出“做什么”的命令,“怎么做” ...
- SGA(System Global Area)
系统激活时在内存内规划的一个固定的区域,用于存储每位使用者所需存取的数据和必备的系统信息.这个区域成为系统全局区. 数据块缓存区:存放读取数据文件的数据块副本,或者曾经处理过的数据.有效减少读取数据时 ...
- 基于现有数据库的Code First模式迁移更新数据库
本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下 ...
- idea 从github下载项目提示 file name too long 的解决方案
1.找到git shell命令行 2运行如下命令 git config --global core.longpaths true 附地址https://github.com/Strider-CD/st ...
- 原生ajax基础
/*ajax对象的成员常用属性:responseText:以字符串形式接收服务器端返回的信息responseXML:以Xml Document对象形式接收服务器返回的信息readyState:返回当前 ...