Java applet,加载本机dll的问题

时间:2011-03-23 12:06:15

标签: java c++ html dll applet

我正在编写一个Java applet,用于加载在非托管C ++中创建的dll。我正在写一些基本测试来加载它。

以下是代码:

DLL:

#define DllExport _declspec(dllexport)
DllExport int calc();


DllExport int calc() {
return 1000;
}

小程序:

import java.applet.*;
import java.awt.*;


public class app extends Applet {

   int width, height;
   private native int calc();

   public void init() {
   try {
       System.loadLibrary("appletdll.dll");
       setBackground( Color.black );
   }
   catch(Exception e) {
       setBackground( Color.red );
               // for debugging, is there another way to for example print 
               // exception messages in an applet?
   }

   //width = getSize().width;
   width = calc();
   height = getSize().height;
  }

  public void paint( Graphics g ) {
     g.setColor( Color.green );
     for ( int i = 0; i < 10; ++i ) {
         g.drawLine( width, height, i * width / 10, 0 );
     }
  }
}

运行applet的HTML:

<html>
<head><title>simple page</title></head>
<body>

<applet width=400 height=400 code="app.class" archive="apptest.jar"> </applet> 

</body>
</html>

在Firefox中运行时我得到的是一个黑色的400x400背景。 在applerviewer中运行时,我在calc()上得到一个UnsatisfiedLinkError。

.jar使用本指南签名: http://wiki.plexinfo.net/index.php?title=How_to_sign_JAR_files

在我的文件夹中: app.class, apptest.jar, appletdll.dll, applet.htm,
myKeystore

我可能做错了很多,我只是想尝试一些基础知识。我一直在寻找applet + dll指南,但它们大多已经过时了。 如果有任何不清楚的地方,请问。

由于

1 个答案:

答案 0 :(得分:0)

首先,该函数应该被称为Java_app_calc()。其次,它应该采用“JNIEnv *”类型的单个参数。应该这样做。

如果你运行程序“javah”,它可以为你生成你的C / C ++头文件,这将帮助你获得正确的函数名称和签名。参数是类的名称(它在已编译的类文件上运行:

javah app