Java-апплет, проблема загрузки родной DLL - PullRequest
0 голосов
/ 23 марта 2011

Я пишу апплет Java, который загружает DLL, созданные в неуправляемом 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 я получаю UnsatisfiedLinkError для calc ().

.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 голосов
/ 23 марта 2011

Во-первых, функция должна называться Java_app_calc ().Во-вторых, он должен принимать один аргумент типа "JNIEnv *".Это должно сработать.

Если вы запустите программу "javah", она может сгенерировать ваш заголовочный файл C / C ++, который поможет вам получить правильные имена функций и подписи.Аргумент - это имя класса (он работает с скомпилированными файлами классов:

javah app

...