分享:写了一个 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 ...
随机推荐
- 【随笔】Linux服务器备份相关
服务器数据的安全性一直都是服务器日常管理的重中之重.Linux服务器虚拟化虽然以其高度可靠的作业系统而闻名,不过系统失效仍然可能发生.可能因为硬体故障,电源中断,或其他不可预料的问题.更常见的这 些问 ...
- (转)selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别
selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ...
- css总集
1 font-style normal 正常显示 italic 斜体 百分比 字体大小 font-size 像素 字体大小 font-family 字体名称 设置字体名称 letter-spacing ...
- [转]caffe的配置过程
caffe的配置过程 转:http://blog.csdn.net/brightming/article/details/51106629 版权声明:本文为博主原创文章,欢迎转载!转载请写明原文链 ...
- Django + Apache + 树莓派 搭建内网微信公众号服务器
其实早在微信开放公众号开发平台时就想弄一个自己的公众号服务器,奈何对web服务器搭建和开发一窍不通,只是注册了一下开发者帐号,并没有采取行动,万恶的拖延症. 前一年,开始接触python,打开了神奇世 ...
- php [] array的区别
<?php/** * Created by IntelliJ IDEA. * User: Administrator * Date: 2017/1/2 * Time: 17:40 定义数组 ar ...
- Sprint 3 回顾与总结 和团队贡献分 以及Sprint 1、2、3 总概
团队情况: 团队名称:Heaven Fire 团队博客地址:https://home.cnblogs.com/u/gjpg/ 团队Github地址:ht ...
- Android WebView 重定向问题
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(Web ...
- java8 ArrayList源码阅读
转载自 java8 ArrayList源码阅读 本文基于jdk1.8 JavaCollection库中有三类:List,Queue,Set 其中List,有三个子实现类:ArrayList,Vecto ...
- set命令
set命令简介 set命令是shell中初学者比较少接触,但是却很有用的一个命令(这里我们说的shell指的是bash).set命令是shell解释器的一个内置命令,用来设置shell解释器的属性,从 ...