关于Java调用C写的动态链接库的具体实现方法,自己捉摸了好久,现在算是来造福大众了 T _T

Java 如何调用C的链接库

这里以我自己写的一个程序为例:

第一步:

首先建立一个标准的java工程,如:sssss,在sssss中新建类aaaa

然后添加代码:

//这里是你想要使用的函数的声明,注:函数名要在这里定义,因为后面要使用这个文件//生成C的头文件,然后再C里面具体实现该方法

    public native int ProgrammeStart();

    public native int DrawBalesStart();

    static{

        System.loadLibrary("JavaDLL");//这里JavaDLL是待会要创建的C的DLL名字

    }

 

    public static void main(String[] args){

            aaaa s = new aaaa();

           s.ProgrammeStart();

           s.DrawBalesStart();

    }

至此Java工程里面的工作已经做完了,接下来我们就要来具体实现C的链接库了。

 

第二步:

首先找到刚才新建的Java工程将其中的src目录下的.java文件,将其拷贝到桌面上新建的一个文件夹里,如123(也可以直接在该文件夹里操作);

接下来运行cmd中使用cd指令进入到123中,执行javac aaaa.java,则文件夹中生成aaaa.class文件;然后在123中再新建一个文件夹sssss(即java中包的名称)并将class文件放进去,接着执行指令javah sssss.aaaa,则产生sssss_aaaa.h文件。文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class sssss_aaaa */


#ifndef _Included_sssss_aaaa
#define _Included_sssss_aaaa
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     sssss_aaaa
 * Method:    ProgrammeStart
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_sssss_aaaa_ProgrammeStart
  (JNIEnv *, jobject);


/*
 * Class:     sssss_aaaa
 * Method:    DrawBalesStart
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_sssss_aaaa_DrawBalesStart
  (JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif

至此第二步就全部完成了

 

第三步:建立VC Win32DLL程序空工程JavaDll(这里的工程名使用上面LoadLibrary(“”)中的名称),不包含任何文件

       首先引入第二步生成的sssss_aaaa.h文件(记得把该文件拷贝到本工程目录下),再建立对应的CPP文件,如sssss_aaaa.cpp;

       然后,将方法声明拷贝到cpp文件中实现,如:

JNIEXPORT jint JNICALLJava_sssss_aaaa_ProgrammeStart  (JNIEnv*, jobject)

{

       //具体实现

}

最后编译生成DLL(见Debug文件夹)。

注:编译时可能会提示jni错误,这是因为没有包含jni库的路径,在工具》选项》目录》Include Files 中添加:(这是jni头文件的目录所在根据自己java的安装位置适当修改)

C:\Program Files\Java\jdk1.8.0_25\include\win32

C:\Program Files\Java\jdk1.8.0_25\include

第四部:

将编译好的DLL文件拷贝到Java工程目录下并直接运行即可(即与以下两个文件同目录):

 .project

.classpath

总算弄完了,大家做个参考吧!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值