Zurück   Entwickler-Forum > Java™ > Java™ Web-Anwendungen > Weitere Themen

Antwort
 
Themen-Optionen Ansicht

JNA Problem
Alt 31.07.2010, 12:16   #1
xpl0red
Neuer Benutzer
 
xpl0red ist offline
Registriert seit: 19.08.2008
Beiträge: 6
xpl0red befindet sich auf einem aufstrebenden Ast
Standard 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?
  Mit Zitat antworten

Anzeige

Alt 31.07.2010, 12:25   #2
Christian Marquardt
Forenheld
 
Christian Marquardt ist offline
Registriert seit: 26.02.2003
Beiträge: 9.545
Christian Marquardt befindet sich auf einem aufstrebenden Ast
Standard

Wenn das der ganze C/C++ Quelltext ist, dann ist das keine DLL
__________________
Christian

________________________________________
C-Ecke
  Mit Zitat antworten

Alt 31.07.2010, 13:11   #3
xpl0red
Neuer Benutzer
 
xpl0red ist offline
Registriert seit: 19.08.2008
Beiträge: 6
xpl0red befindet sich auf einem aufstrebenden Ast
Standard

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;
}
  Mit Zitat antworten

Alt 31.07.2010, 14:37   #4
Christian Marquardt
Forenheld
 
Christian Marquardt ist offline
Registriert seit: 26.02.2003
Beiträge: 9.545
Christian Marquardt befindet sich auf einem aufstrebenden Ast
Standard

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

________________________________________
C-Ecke
  Mit Zitat antworten

Alt 01.08.2010, 21:09   #5
xpl0red
Neuer Benutzer
 
xpl0red ist offline
Registriert seit: 19.08.2008
Beiträge: 6
xpl0red befindet sich auf einem aufstrebenden Ast
Standard

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

=> Erledigt!
  Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu



Alle Zeitangaben in WEZ +2. Es ist jetzt 03:54 Uhr.



© 1995–2009 Software & Support Verlag GmbH. Vervielfältigung nur mit Genehmigung des Verlags.