Windows系统下通过JNI调用dll动态库的实现

4 篇文章 0 订阅
2 篇文章 0 订阅
  • 目的:java代码使用jni获取数据
  • 工具: eclipse + Microsoft visual studio (c++)
  • 业务代码:
  1. Java代码业务实现:

package com.weip.jni;

/**

 * 操作步骤:

 * 1、进到工程目录,src下

 * 2、C:\Users\Administrator>e:

 * E:\>cd E:\eclipse-workspace\Wp_NDK_JNI\src

 * E:\eclipse-workspace\Wp_NDK_JNI\src>javah -d ../jni com.weip.jni.Test

 * 3、刷新eclipse项目出现jni目录,下面有头文件  com_weip_jni_Test.h

 * 4、打开visual studio ,引入头文件

 */

public class Test {

    //获取字符串

    public native String getTestString();

    public static void main(String[] args) {

        Test test = new Test();

        System.out.println(test.getTestString());

    }

    

    //加载动态库

    //linux:.so(Android也是linux系统)   windows:.dll

    static {

        //加载.dll动态库

        System.loadLibrary("testjni");

   }

}

      2、c代码的逻辑实现

      test.c

最后运行java代码,可以输出一个字符串(通过jni输出)

//分析jni方法:

//一般写法:
//jstring Java_com_weip_jni_Test_getTestString
//(JNIEnv *env, jobject jobj){
//    return (*env)->NewStringUTF(env, "Hello,Jni");
//}

//1.1 分析JNIEXPORT:宏定义(作用:dll动态库中允许该函数被外部调用)
//如果我们不写,编译器自动会加上
//为什么这么写?行业规范(编译动态库的规范)  --固定格式
//1.2 JNICALL:用于约束函数入栈的顺序和堆栈清理规则(注意:window下的规则__stdcall)
//如果删除JNIEXPORT和JNICALL也不会报错,系统编译的时候自动会加上
//1.3 分析方法名称含义 :Java_com_weip_jni_Test_getTestString
//一种命名规范(为了区分方法) 哪个公司哪个项目哪个类的哪个方法  说白了就是唯一标识

JNIEXPORT jstring JNICALL Java_com_weip_jni_Test_getTestString
(JNIEnv *env, jobject jobj){
    return (*env)->NewStringUTF(env,"Hello,Jni");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值