我正在编写一个Java applet,它加载在非托管C++中创建的动态链接库。我正在写一些基本的测试来加载它。
代码如下:
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 );
}
}
}运行小程序的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指南,但它们大多都过时了。如果有什么不清楚的地方,尽管问。
谢谢
发布于 2011-03-23 20:11:42
首先,应该将该函数称为Java_app_calc()。其次,它应该接受一个"JNIEnv *“类型的参数。这应该就行了。
如果您运行"javah“程序,它可以为您生成C/C++头文件,这将帮助您获得正确的函数名称和签名。参数是类的名称(它对已编译的类文件进行操作:
javah应用
https://stackoverflow.com/questions/5404975
复制相似问题