• 分享:写了一个 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("结果如下: "+Sum(3,2)+" ");
       System.out.println("结果如下: "+Sum1()+" ");
    }
    }
    执行结果:


    更多详情:>>http://kan.weibo.com/con/3639866932723815

    完全由本人开发,有任何疑问,请联络:
    QQ群:74965947, 72133568,27236303,16592133,204725117,204724518

    小白救星 QQ 99923309
  • 相关阅读:
    【ORA-02049】超时分布式事务处理等待锁 解决方法
    Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
    JS身份证号码校验
    linux 下查看cpu位数 内核等参数命令(转)
    linux ps命令,查看进程cpu和内存占用率排序(转)
    JAVA图片验证码
    JAVA BigDecimal 小数点处理
    Linux命令大全
    Eclipse Java注释模板设置详解
    JSONArray的应用
  • 原文地址:https://www.cnblogs.com/bdccloudy/p/3402758.html
Copyright © 2020-2023  润新知