java调用dll动态库文件方法

  

     公司交代了一个任务,需要在本地项目中读取一个关于医保接口的动态库文件,文件名是SiInterface.dll,其中有两个需要实现的方法,

int INIT(char *pErrMsg) 和 int BUSINESS_HANDLE(  char*inputData,  char*outputData),前提是要进行动态库的调用

     在java中,最基本的动态库调用就是jni调用动态库的方法,

 简单介绍及应用如下:

   一、JAVA中所需要做的工作

   在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

   static {

   System.loadLibrary(“goodluck”);

   }

  

   在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

   还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:

   public native static void set(int i);

   public native static int get();

   然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

   例如程序testdll.java,内容为:

   public class testdll

   {

   static

   {

   System.loadLibrary("goodluck");

   }

   public native static int get();

   public native static void set(int i);

   public static void main(String[] args)

   {

   testdll test = new testdll();

   test.set(10);

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

   }

   }

  

   用javac testdll.java编译它,会生成testdll.class。

   再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。

   二、C/C++中所需要做的工作

   对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。

   接上例子。我们先看一下testdll.h文件的内容:

   /* DO NOT EDIT THIS FILE - it is machine generated */

   #include

   /* Header for class testdll */

   #ifndef _Included_testdll

   #define _Included_testdll

   #ifdef __cplusplus

   extern "C" {

   #endif

   /*

   * Class: testdll

   * Method: get

   * Signature: ()I

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用DLL动态库,可以使用Java Native Interface(JNI)来实现。下面是一个简单的步骤: 1. 编写C/C++代码,并将其编译成DLL动态库文件; 2. 在Java代码中声明native方法,用于调用DLL动态库中的函数; 3. 使用Javah命令生成C/C++头文件; 4. 在C/C++代码中实现native方法调用DLL动态库中的函数; 5. 将C/C++代码编译成动态库文件,并将其与Java代码一起运行。 下面是一个简单的例子: Java代码: ```java public class NativeMethod { static { System.loadLibrary("MyDLL"); // 加载动态库文件 } public static native int add(int a, int b); // 声明native方法 } ``` C/C++代码: ```c++ #include "NativeMethod.h" // 头文件 JNIEXPORT jint JNICALL Java_NativeMethod_add(JNIEnv *env, jclass cls, jint a, jint b) { jint result; // 调用DLL动态库中的函数 result = MyAddFunction(a, b); return result; } ``` 其中,NativeMethod.h文件Javah命令生成。在命令行中,使用以下命令生成头文件: ``` javah -jni NativeMethod ``` 在这个例子中,MyAddFunction是DLL动态库中的函数,它的原型应该与Java代码中声明的native方法的原型相同。编译C/C++代码时,需要将其编译成DLL动态库文件,并将其与Java代码一起运行。 需要注意的是,使用JNI调用DLL动态库需要谨慎,因为错误的操作可能会导致程序崩溃或安全漏洞。建议仔细了解JNI的使用方法和安全机制,以确保程序的安全性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值