这是一个比较麻烦的方法。。
 
一、首先,你要先安装一个VC,我的装在了D:\software\C++\Microsoft Visual Studio
 
二、我的jdk安装目录是D:\Program Files\Java\jdk1.7.0_67,
那么把:
D:\Program Files\Java\jdk1.7.0_67\include         下面的 jni.h 和
D:\Program Files\Java\jdk1.7.0_67\include\win32   下面的 jni_md.h
复制到 D:\ruanjian\C++\Microsoft Visual Studio\VC98\Include
 
三、在f:\新建一个Sample.java
 
public class Sample
{
public native int intMethod(int n);
public native boolean booleanMethod(boolean bool);
public native String stringMethod(String text);
public native int intArrayMethod(int[] args);
public static void main(String[] args) 
{
System.loadLibrary("Sample");
Sample sample = new Sample();
 
int square = sample.intMethod(5);
boolean bool = sample.booleanMethod(true);
String text = sample.stringMethod("JAVA");
int sum = sample.intArrayMethod(new int[] { 1, 1, 2, 3, 5, 8, 13 });
System.out.println("intMethod:   " + square);
System.out.println("booleanMethod:   " + bool);
System.out.println("stringMethod:   " + text);
System.out.println("intArrayMethod:   " + sum);
}
}
 
 
四、在cmd下输入命令:
 
f:
javac Sample.java
javah -classpath . Sample
 
结果在同一目录下生成了 Sample.class 和 Sample.h
 
(在别人的电脑下javah Sample就可以生成 Sample.h,不明白为什么我的不可以……)
 
 
五、在f:\再新建一个Sample.c
 
#include "Sample.h"
#include
 
JNIEXPORT jint JNICALL Java_Sample_intMethod(JNIEnv *env, jobject obj, jint num) 
{
return num * num;
}
 
JNIEXPORT jboolean JNICALL Java_Sample_booleanMethod(JNIEnv *env, jobject obj, jboolean boolean) 
{
return  !boolean;
}
 
JNIEXPORT jstring JNICALL Java_Sample_stringMethod(JNIEnv *env, jobject obj, jstring string) 
{
const char *str = (*env)->GetStringUTFChars(env, string, 0);
char cap[128];
strcpy(cap,   str);
(*env)->ReleaseStringUTFChars(env, string, str);
return   (*env)->NewStringUTF(env, strupr(cap));
}
 
JNIEXPORT jint JNICALL Java_Sample_intArrayMethod(JNIEnv *env, jobject obj, jintArray array) 
{
int i, sum = 0;
jsize len = (*env)->GetArrayLength(env,array);
jint *body = (*env)->GetIntArrayElements(env, array, 0);
for (i=0;   i
{
sum += body[i];
}
(*env)->ReleaseIntArrayElements(env, array, body, 0);
return sum;
}
 
void   main(){}
 
 
六、cmd下输入:
 
SET  PATH=D:\software\C++\Microsoft Visual Studio\VC98\Bin;%PATH% 
SET  INCLUDE=D:\software\C++\Microsoft Visual Studio\VC98\Include;%INCLUDE% 
SET  LIB=D:\software\C++\Microsoft Visual Studio\VC98\Lib;%LIB% 
 
cl  -LD Sample.c -FeSample.dll
java Sample
 
效果:
 
 
 
 
PS:若使用c1命令时出现找不到mspdb60.dll时,可上网去载一个,
若电脑是32位系统放到 C:\Windows\System32,64位放到C:Windows\SysWOW64下,然后"开始-运行-regsvr32 mspdb60.dll"
 
 
 

1、Java调用C语言(本地法)的更多相关文章

  1. 3、Java调用C语言(JNA法)

    这个方法挺方便的……(改写“二.Java调用C语言(JNative法)“的例子) 一.访问https://github.com/twall/jna ,下载jna-4.1.0.jar(版本不同名字不同) ...

  2. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  3. JAVA调用C语言写的SO文件

    JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...

  4. JAVA 调用 R 语言

    1 简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的 ...

  5. Java调用R语言

    R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/ ...

  6. JAVA 调用 R 语言之升华篇

    由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...

  7. 2、Java调用C语言(JNative法)

    这个方法也是挺麻烦的…… 一.下载JNative.jar,把它放在你jdk下的\jre\lib\ext目录下 二.在 F:\MinGW\JNative 新建 Test.java: public cla ...

  8. Java如何调用C语言程序,JNI技术

    Java为什么要调用C语言编写的程序因为涉及操作系统底层的事件,Java是处理不了的,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流,这个事Java就做不了,只能交给C语 ...

  9. java调用dll-JNA

    介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA . JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JN ...

随机推荐

  1. ubuntu 微信安装

    安装过程: 下载最新版本tar.gz压缩包https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-x ...

  2. R-CNN常见问题

    可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗? 不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG.SIFT ...

  3. Oracle报Ora01522

    应用服务报错截图 数据库后台日志报错截图 从日志分析应该是回滚异常造成表空间无法使用回滚段,而回滚涉及的表空间为undo表空间 尝试新建UNDO表空间,再将UNDO_TABLESPACE切换到新建的U ...

  4. vue php实战项目开发(一)

    说在前面 项目开发过程中一直在学习,所以记录的过程可能比较乱,打算前台使用vue,后台使用php开发手机端的项目,这里记录遇到的问题和学习的过程 phpstudy环境下搭建虚拟域名,并开启URL重写 ...

  5. 冲刺周三The Third Day

    一.ThirdDay照片 二.项目分工 三.今日份燃尽图 四.项目进展 码云团队协同环境构建完毕 利用Leangoo制作任务分工及生成燃尽图 完成AES加解密部分代码 用代码实现对文件的新建.移动.复 ...

  6. C# WPF 漂亮的loading 效果

    <UserControl x:Class="TestLoadPic.Loading" xmlns="http://schemas.microsoft.com/win ...

  7. nginx创建默认虚拟主机

    创建默认虚拟主机配置文件作用:禁止任何人通过ip或未允许的域名访问web服务. 如:vim vhosts/default.conf server { listen 80 default; server ...

  8. centos6.5+jdk1.7+mysql5.6+tomcat8.0部署jpress

    前言:此篇记录在linux下搭建环境部署jpress,mysql使用的是源码安装 1.准备 2.安装 3.部署 1.准备 a.准备centos6.5服务器环境 mysql-5.6.19.tar.gz  ...

  9. HTML学习之==>JS

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  10. SELECT-OPTIONS对象

    1. SELECT-OPTIONS基本语法及定义 SELECT-OPTIONS通常用于参照一数据库字为建立数据输入域,其定义对象命名长度不能超过8位,其产生的屏幕对象最大输入长度为18位,语法如下: ...