java c dll文件_java通过jni调用C语言文件方法利用cl命令生成dll文件

命令行完成代码:http://www.cnblogs.com/luosongchao/p/3220324.html

http://blog.csdn.net/jiangwei0910410003/article/details/17465085

VS可视化完成C代码:http://blog.csdn.net/code_nice/article/details/48085363

遇到问题:http://bbs.csdn.net/topics/330047890​

http://bbs.csdn.net/topics/390635224?page=1

配置VC6.0环境,文件位置(引用的lib,include等等),参数变化

1.com_ISA.h:

#include

#ifndef _Included_com_ISA

#define _Included_com_ISA

#ifdef __cplusplus

extern "C" {

#endif

JNIEXPORT int JNICALL Java_com_ISA_goZip

(JNIEnv *, jobject, jint,

jobjectArray);

#ifdef __cplusplus

}

#endif

#endif

1.

com_ISA.c:#include

#include

#include "igzipTest.h"

JNIEXPORT int JNICALL Java_com_ISA_goZip

(JNIEnv * env, jobject cl, jint argc, jobjectArray

argv){

jsize len = (*env)->GetArrayLength(env,

argv);

int i=0;

char

*args[3];

for(i=0;i

jstring string =

(*env)->GetObjectArrayElement(env,argv,i);

const char*

row=(*env)->GetStringUTFChars(env,string,0);

strcpy(args[i],row);

//free java string jrow

(*env)->ReleaseStringUTFChars(env,string,row);

}

test(i,args);//调用原来的main

}

2.   igzipTest.h:#ifndef

_IGZIPTEST_H

#define _IGZIPTEST_H

#ifdef __cplusplus

extern "C" {

#endif

int test(int agrc, char *argv[]);

#ifdef __cplusplus

}

#endif

#endif

2.

igzipTest.c:

#include "igzipTest.h"

int test(int agrc, char *argv[]){

。。。。。。。

return 0;

}

注意""和<>​的区别

cl -I"E:\JavaFile\intelISA\bin\isa-l-master\include" -I"E:\JavaFile\intelISA\bin\isa-l-master\igzip"  -I "D:\jdk1.7\include" -I "D:\jdk1.7\include\win32"-LD ISAImp.c -Feisa.dll ​

!!注:仅生成32位dll......64位需重新编译,过程貌似很复杂​

Java可以通过JNI调用本地C语言方法,而本地C语言方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件

形式,在UNIX机器上是SO文件形式),通过调用本地的库文件的内部方法,使Java可以实现和本地机器的紧密联系,调用系统级的各接口方法。具体步骤如下:

1、在Java文件中对将要调用的方法做本地声明,关键字为native,并且只需要声明,而不需要具体实现。2、将C语言源文件编译链接成库文件。

调用第三方dll:http://wallimn.iteye.com/blog/647409

部分实例:https://zhidao.baidu.com/question/1178743076691527779.html​

问题:VC6.0 error LNK2001: unresolved external symbol

_main:https://www.douban.com/note/65638800/

nmake命令:http://www.cnblogs.com/kekec/archive/2013/04/21/3007277.html​

java

jni调用c函数实例分享(​http://www.jb51.net/article/45003.htm

JNI中使用cl命令生成DLL文件http://www.cnblogs.com/luosongchao/p/3220324.html

[JNI] Eclipse直接完成JAVA调用C/C++

(Eclipse上使用CDT结合MinGW)http://www.blogjava.net/orangewhy/archive/2007/05/24/119645.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值