
applet通过数字签名用JNI方式调用本地dll文件
写测试用的applet第一步,首先弄明白applet怎么实现,里面要导入dll文件System.loadLibrary("fff")和声明用到的本地方法,这个文件会在下一步介绍如何生成//Java代码import java.applet.Applet;import java.awt.Graphics;public class MyApplet extends Applet { static { System.loadLibrary("fff"); } public native int reint(); @Override public void paint(Graphics g) { int a=reint(); g.drawString(String.valueOf(a), 5, 35); }}建立applet要用的dll文件用VC6.0动态连接库工程起名为fff,这里要用到JNI技术了先把MyApplet生成 .class文件javac MyApplet.java然后要.class文件生成C引用的头文件javah MyApplet.class/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class MyApplet */#ifndef _Included_MyApplet#define _Included_MyApplet#ifdef __cplusplutern "C" {#endif#undef MyApplet_FOCUS_TRERSABLE_UNKNOWN#define MyApplet_FOCUS_TRERSABLE_UNKNOWN 0L#undef MyApplet_FOCUS_TRERSABLE_DEFAULT#define MyApplet_FOCUS_TRERSABLE_DEFAULT 1L#undef MyApplet_FOCUS_TRERSABLE_SET#define MyApplet_FOCUS_TRERSABLE_SET 2L#undef MyApplet_TOP_ALIGNMENT#define MyApplet_TOP_ALIGNMENT 0.0f#undef MyApplet_CENTER_ALIGNMENT#define MyApplet_CENTER_ALIGNMENT 0.5f#undef MyApplet_BOTTOM_ALIGNMENT#define MyApplet_BOTTOM_ALIGNMENT 1.0f#undef MyApplet_LEFT_ALIGNMENT#define MyApplet_LEFT_ALIGNMENT 0.0f#undef MyApplet_RIGHT_ALIGNMENT#define MyApplet_RIGHT_ALIGNMENT 1.0f#undef MyApplet_serialVersionUID#define MyApplet_serialVersionUID -7644114512714619750i64#undef MyApplet_serialVersionUID#define MyApplet_serialVersionUID 4613797578919906343i64#undef MyApplet_INCLUDE_SELF#define MyApplet_INCLUDE_SELF 1L#undef MyApplet_SEARCH_HEYWEIGHTS#define MyApplet_SEARCH_HEYWEIGHTS 1L#undef MyApplet_serialVersionUID#define MyApplet_serialVersionUID -2728009084054400034i64#undef MyApplet_serialVersionUID#define MyApplet_serialVersionUID -5836846270535785031i64/* * Class:MyApplet * Method: reint * Signature: ()I */JNIEXPORT jint JNICALL Java_MyApplet_reint (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif这里我们只关心那个方法,把方法copy到下面的c++source file里面第三部具体的C++代码实现.新建dll工程->新建c++ source file//c++ code#include"MyApplet.h"JNIEXPORT jint JNICALL Java_MyApplet_reint(JNIEnv *, jobject){ return 3;}不用怀疑c++代码就这么简单,但是jni.h和Hello.h的路径要设置正确,编译器才能找到这两个文件jni.h在jdk/include下jni.h里面还会包含一个jni_md.h,在jdk/include/win32目录下把以上提到的路径加到C++的库目录下.工具->选项->目录.然后编译dll,就会生成我们需要的dll文件.这个dll的文件名,就是我们在java代码中System.loadLiberary("fff")里面的这个参数,大小写无所谓,后缀名不需要,会自动识别。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25118-1.html
大家的日子过得都不容易啊
联合国授权了吗