命令行完成代码: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