我正在编写一个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指南,但它们大多已经过时了。 如果有任何不清楚的地方,请问。
由于
答案 0 :(得分:0)
首先,该函数应该被称为Java_app_calc()。其次,它应该采用“JNIEnv *”类型的单个参数。应该这样做。
如果你运行程序“javah”,它可以为你生成你的C / C ++头文件,这将帮助你获得正确的函数名称和签名。参数是类的名称(它在已编译的类文件上运行:
javah app