/*
* Class: testdll
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_testdll_set
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具体实现的时候,我们只关心两个函数原型
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);
和
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型和本地的int沟通的一种类型,我们能够视而不见,就当做int使用。函数的名称是JAVA_再加上java程式的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程式中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰他。
好,下面我们用testdll.cpp文档具体实现这两个函数:
#include "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
编译连接成库文档,本例是在WINDOWS下做的,生成的是DLL文档。并且名称要和JAVA中需要调用的一致,这里就是goodluck.dll
把goodluck.dll拷贝到testdll.class的目录下,java testdll运行他,就能够观察到结果了。



