J'écris une applet Java qui charge les DLL créées en C++ non géré. J'écris un test de base pour le charger.Applet Java, problème de chargement de la DLL native
Voici le code:
La DLL:
#define DllExport _declspec(dllexport)
DllExport int calc();
DllExport int calc() {
return 1000;
}
L'applet:
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);
}
}
}
Le code HTML exécutant l'applet:
<html>
<head><title>simple page</title></head>
<body>
<applet width=400 height=400 code="app.class" archive="apptest.jar"> </applet>
</body>
</html>
Tout ce que je reçois quand courir dans Firefox est un blac Fond de 400x400 k. Lors de l'exécution dans applerviewer, j'obtiens un UnsatisfiedLinkError sur calc().
Le .jar a été signé avec ce guide: http://wiki.plexinfo.net/index.php?title=How_to_sign_JAR_files
Dans le dossier que j'ai: app.class, apptest.jar, appletdll.dll, applet.htm,
myKeystore
Je fais probablement beaucoup de mal, j'essaie juste de faire fonctionner quelques bases. J'ai regardé les guides applet + dll mais ils sont pour la plupart dépassés. S'il y a quelque chose qui n'est pas clair, il suffit de demander.
Merci
Quelle fonction voulez-vous dire, si la fonction dans le dll ou dans le java renommé Qu'en est-il le JNIEnv argument * – KaiserJohaan
@KaiserJohaan Vous semblez manquer les fondamentaux de JNI, je voudrais google pour un tutoriel ou parcourir celui-ci avant même de commencer http://download.oracle.com/javase/1.5.0/docs Le JNIEnv * est fourni par JVM et contient tout ce dont vous avez besoin pour interagir avec Java à partir du code natif.Après avoir écrit des milliers de lignes de code JNI, je suggère également d'évaluer les alternatives ... Ce n'est pas très amusant et il est très facile de faire des erreurs – Fredrik
La fonction C devrait avoir ce nom - c'est le nom que recherche la JVM. Comme le dit @KaiserJohaan, l'argument est fourni par la JVM lorsqu'elle invoque votre méthode native. –