Announcement

Collapse
No announcement yet.

JNA Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JNA Problem

    Hallo!

    Ich habe ein Problem mit JNA. Ich möchte eine Funktion aus einer in C implementierten DLL aufrufen. Hier der Code der dll:
    Code:
    #include <stdio.h>
    #include "test.h"
    
    int GetRevision() {
    	return 6543;
    }
    Dazu gibts noch die entsprechende Header-Datei:
    Code:
    #ifndef TEST_H_
    #define TEST_H_
    
    int GetRevision();
    
    #endif /* TEST_H_ */
    Das ganze wird dann zu "test.dll" kompiliert. Nun möchte ich aus Java heraus die Funktion GetRevision per JNA Aufrufen. Das versuche ich folgendermaßen:

    Code:
    package foo;
    
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    
    public class HelloWorld {
    
        public interface NativeLibrary extends Library  {
        	int GetRevision();
        }
    
        public static void main(String[] args) {
        	System.out.println(System.getProperty("jna.library.path"));
        	
        	NativeLibrary instance = (NativeLibrary) Native.loadLibrary("test", NativeLibrary.class);
            System.out.println(instance.GetRevision());
        }
    }
    Die benötigte JNA.jar ist natürlich im classpath. Beim starten setze ich per "-Djna.library.path=..." das entsprechende Verzeichnis, in dem test.dll liegt.

    Beim Starten des Java-Programms wird der jna.library.path korrekt ausgegeben. Und dann bleibt das Programm hängen. Nach mehreren Versuchen meldet Eclipse, dass der PermGen Space voll ist und beendet sich.

    Wo ist der Fehler?

  • #2
    Wenn das der ganze C/C++ Quelltext ist, dann ist das keine DLL
    Christian

    Comment


    • #3
      Hm, hab vorher noch nie eine dll gebaut.. Habs folgendermaßen erweitert, aber es geht immer noch nicht. Was fehlt noch?

      Code:
      #include <stdio.h>
      #include <windows.h>
      #include "test.h"
      
      // DLL entry function (called on load, unload, ...)
      BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
      {
          return TRUE;
      }
      
      __declspec(dllexport) int GetRevision()
      {
      	return 6543;
      }

      Comment


      • #4
        Dann würde ich mal probieren die DLL mit der Klasse System zu laden
        Christian

        Comment


        • #5
          Ich weiß nicht, was das Problem war, aber ich hab den Zugriff auf die Library inzwischen in C gelöst.

          => Erledigt!

          Comment

          Working...
          X