Microsoft Standard Compiler

Status
Nicht offen für weitere Antworten.

SammY

Bekanntes Mitglied
Hi Leute,

kann mir jemand den Link posten wo ich den Microsoft Standard Compiler downloaden kann.

Bräuchte in für JNI.


Danke.

Mfg SammY
 

thE_29

Top Contributor
Weiß net, am besten ist du saugst das Studio runter!

hast eine IDE auch gleich mit dabei!

Ist ne abgespeckte gratis Version von MS!
 

byte

Top Contributor
Jo, wie gesagt, saug die Express Version, da ist der Compiler dabei. Du brauchst die IDE gar nicht anzurühren, sondern nur die cl.exe suchen. ;)
 

SammY

Bekanntes Mitglied
Das hab ich ja schon alles gemacht.
Hab die cl.exe schon.

Wie muss ich denn nach einander vor gehen damit ich eine dll in ein java programm einbinden kann?
 

SammY

Bekanntes Mitglied
Hab jetzt alles soweit hinbekommen.
Bekomm nur noch den bekannten UnsatisfiedLink error.

Ich poste mal meine Dateien vielleicht erkennt ihr den fehler.

Hier die Java-Datei:

Code:
public class JNI_Ausgabe{
	public native String Ausgabe(int i);
	public static void main(String[] args){
		new JNI_Ausgabe().Ausgabe(10);
	}
	static {
		System.loadLibrary("c_ausgabe");
	}
}

Und hier die C-Datei:

Code:
#include "JNI_Ausgabe.h"
#include <stdio.h>
#include <jni.h>

JNIEXPORT void JNICALL Ausgabe(JNIEnv *env, jobject obj, jdouble wert){
	printf("Ergebnis: %10.3lf\n", wert);
}

Und hier noch der Fehler:

C:\jni>java JNI_Ausgabe
Exception in thread "main" java.lang.Unsatisfied
at JNI_Ausgabe.Ausgabe(Native Method)
at JNI_Ausgabe.main(JNI_Ausgabe.java:4)

Schauts euch bitte mal an.

Danke
Gruß SammY
 
G

Guest

Gast
Hier ein simples Beispiel

Boottime.java
Code:
import java.util.Date;

public class Boottime
{
  static 
  {
    System.loadLibrary("boottime");
  }
  private static native long getTickCount();

  public static Date getBoottime()
  {
    return new Date(System.currentTimeMillis()-Boottime.getTickCount());
  }

  public static void main(String argv[])
  {
    System.out.println(getBoottime());
  }
}
Boottime.c
Code:
#include <jni.h>
#include <windows.h>
#include "boottime.h"

JNIEXPORT jlong JNICALL Java_Boottime_getTickCount(JNIEnv *env, jclass obj)
{
  return GetTickCount();
}
build.bat
Code:
@echo off
%JAVA_HOME%\bin\javac.exe Boottime.java
%JAVA_HOME%\bin\javah.exe Boottime
cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 /GD -LD boottime.c -Feboottime.dll
 

SammY

Bekanntes Mitglied
Vielen Dank für eure Hilfe. Habs auch schon hinbekommen.

Ich hab vor eine kleine Anleitung dazu zu schreiben.
Könnte man die dann vielleicht zu den FAQs hier im Forum stellen, weil dieses Thema ja öfter gebraucht wird und immer wieder die gleichen Fehler auftreten. :D
Wer weis denn an wen ich mich da wenden muss?? ???:L

Gruß SammY.
 

thE_29

Top Contributor
Wenn man einfach die IDE nimmt, anstatt auf der Konsole rumzuhacken ist das eigentlich kein Problem :D


Aber kannst ruig machen, können wir dann reinhängen!

Ich persönlich würde mich über eine Linux FAQ für JNI freuen, da ich noch nie eine .so Datei zum Laufen gebracht habe, bzw noch nie etwas mit dem gcc Compilier geschafft habe (weder in Linux noch Windows).

Er kann die GCC dll´s/so´s einfach net laden..
 

SammY

Bekanntes Mitglied
Das gleiche Problem hatte ich auch. Hab mit dem gcc nichts zum Laufen gebracht. Wenn ich damit dann fertig bin versuch ich das ganze mal unter Linux zum Laufen zu bringen.

so far
 

SammY

Bekanntes Mitglied
Hi Leute,

da ich wieder mal das Problem mit den JNI's hatte und ewig lang brauche ne vernünftige Anleitung zu
finden habe ich mir gedacht ich mach mal selber was.

Damit ihr auch was davon habt poste ich sie hier. :D




Schritt für Schritt Anleitung zum Erstellen eines JNI’s (Java Native Interfaces)



Übersicht:
1. Ein Java Programm schreiben. Diese Klasse enthält die deklarierte native Me-thode.
2. Kompilieren der Java – Klasse welche die „Main“ -und die „Native“ Methode enthält
3. Generieren der Header-Datei für die „Native“ Methode. Dazu wird javah mit der Flag –jni benutzt.
4. Schreiben der Implementierung der „Native“ Methode in einer Programmier-sprache wie z.B. C oder C++.
5. Kompilieren der Header –und der Implementierungsdatei in ein „shared library file“.
6. Ausführen des Java Programms.


Schritt 1: Schreiben des Javacodes.
Schritt 2: Kompilieren des Javacodes.
Schritt 3: .h File erzeugen(Headerdatei)
Schritt 4: Schreiben der Implementierung der „Native“ Methode
Schritt 5: Erzeugen der Shared Library
Schritt 6: Ausführen des Programms



Schritt 1: Schreiben des Javacodes.

Der folgende Javacode definiert eine Klasse namens HelloWorld. Diese Klasse dekla-riert eine Native Methode und implementiert die „Main“ Methode.
Code:
	class HelloWorld {
    		public native void displayHelloWorld();

    		static {
        		System.loadLibrary("hello");
    		}
    
    		public static void main(String[] args) {
        		new HelloWorld().displayHelloWorld();
    		}
	}
Sobald eine Methode aus einer anderen Sprache implementiert wird, muss das Schlüsselwort native verwendet werden.
Code:
	public native void displayHelloWorld();
Das Runtime Environment läd später die dll in die Java Klasse die sie benötigt.
Die HelloWorld Klasse benutzt die System.loadLibrary Methode. Diese Methode läd die dll in das Programm.



Schritt 2: Kompilieren des Javacodes

Benutze den Javacompiler um die Klasse zu kompilieren welche Sie im Schritt vorher erstellt haben.

Javac HelloWorld.java



Schritt 3: .h File erzeugen


In diesem Schritt nutzen Sie das javah Programm um das Headerfile zu erzeugen.
Das Headerfile wird folgendermaßen erzeugt:

Javah –jni HelloWorld

Das erzeugte Headerfile:
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif



Die Java_HelloWorld_displayHelloWorld – Funktion stellt die Schnittstelle zur nativen Methode displayHelloWorld in der Klasse HelloWorld zur Verfügung.
Der Aufbau des Funktionsnamen Java_HelloWorld_displayHelloWorld setzt sich fol-gendermaßen zusammen:

Java_, der Packetname, der Klassenname, Name der „Native“ Methode. Zwischen jeden dieser Komponenten muss ein Unterstrich sein “_“.

In diesem Beispiel wird kein Packetname benötigt da sich die Dateien im default Pa-cket befinden, welcher keinen Namen hat.



Schritt 4: Schreiben der Implementierung der „Native“ Methode

Nun wird die Schnittstelle für die „Native“ Methode geschrieben. Hier die in C ge-schriebene Schnittstelle für die „Native“ Methode Java_HelloWorld_displayHelloWorld
Diese Schnittstelle befindet sich in der Datei HelloWorldImp.c:
Code:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL 
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{
    printf("Hello world!\n");
    return;
}


Schritt 5: Erzeugen der Shared Library

In Schritt eins wurde durch System.loadLibrary(„hello“) die Shared Library ins Java-programm eingebunden. In Windows wird eine dll – Datei erstellt. Nun erstellen wir diese. Sie können mit dem Compiler von Windows die Shared Library mit folgenden Kommando erzeugen.

Cl –Ic:\java\include –Ic:\java\include\win32
–LD HelloWorldImp.c –Fehello.dll



Schritt 6: Ausführen des Programms

Jetzt können Sie das Programm mit dem Java Interpreter ausführen.

Java HelloWorld

Nun sollten Sie folgende Ausgabe sehen:

Hello World!

Wenn Sie die folgende Fehlermeldung bekommen, haben Sie den Library Pfad nicht richtig gesetzt.



Ich hoffe mit dieser kurzen Anleitung somanchen von euch geholfen zu haben. :D
Also viel Spaß und Erfolg damit.

MFG

SammY
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
C Microsoft unterstützt Open JDK Allgemeine Java-Themen 7
H Input/Output Microsoft Word aus JAVA Heraus Steuern. Allgemeine Java-Themen 3
G Java Microsoft Project Allgemeine Java-Themen 2
M Microsoft J++ ? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
O Standard library nativer C code Allgemeine Java-Themen 1
R Locale für Türkei nicht in standard -java ? Allgemeine Java-Themen 1
M Classpath Standard Klasse überschreiben Allgemeine Java-Themen 2
J Standard-I´/O kopieren Allgemeine Java-Themen 5
H Standard Windows-Druck-Dialog Allgemeine Java-Themen 2
foobar Email mit Standard Mailclient versenden Allgemeine Java-Themen 12
S Filesystem Hierarchy Standard Allgemeine Java-Themen 2
A Strings joinen, Standard-Library? Allgemeine Java-Themen 9
heinzepreller Standard Klassen "überlagern" Allgemeine Java-Themen 12
T Standard LAF austauschen Allgemeine Java-Themen 3
S Standard-Bildbetrachtungsprogramm starten? Allgemeine Java-Themen 7
G Standard-Browser herausfinden Allgemeine Java-Themen 4
W Kleines Applet in Standard Java Applikation umwandeln Allgemeine Java-Themen 3
G Standard-Drucker mit Java setzen Allgemeine Java-Themen 4
D Die Versionen Standard, Enterprise und Micro Allgemeine Java-Themen 3
G JRE 1.5.0-rc nicht als Standard-JRE verwenden Allgemeine Java-Themen 6
S standard-email-programm öffnen Allgemeine Java-Themen 4
O standard text editor starten Allgemeine Java-Themen 7
Oneixee5 Compiler-Warnungen Allgemeine Java-Themen 23
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
J Virtuelle Maschine vs Compiler Allgemeine Java-Themen 12
S CMD Compiler Error Allgemeine Java-Themen 13
J Java AOT Compiler Allgemeine Java-Themen 3
C Compiler programmieren Allgemeine Java-Themen 13
D Java Compiler code referencen Allgemeine Java-Themen 0
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
B Java Compiler und JRE Allgemeine Java-Themen 22
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
T Compiler Problem... Allgemeine Java-Themen 7
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
M AWT AWT "Compiler" Allgemeine Java-Themen 5
S Anschauen was der Compiler macht..? Allgemeine Java-Themen 5
A Java Compiler Allgemeine Java-Themen 4
A AspectJ Compiler nicht im CLASSPATH? Allgemeine Java-Themen 4
S [ANT] compiler wird nicht gefunden Allgemeine Java-Themen 6
V Boxing und Unboxing compiler warnings Allgemeine Java-Themen 6
J Enum Problem: compiliert nicht mit Sun's compiler. Allgemeine Java-Themen 2
O JNI Compiler Problem Allgemeine Java-Themen 2
C Java Compiler und Multiplikation konstanter Faktoren Allgemeine Java-Themen 2
F Kommunikation zw 2 Java-Programmen mit unterschiedl Compiler Allgemeine Java-Themen 13
T Java Compiler Allgemeine Java-Themen 8
K Compiler Fehler definieren/beeinflussen? Allgemeine Java-Themen 5
T Compiler für Rückschritt Java5 -> Java2 Allgemeine Java-Themen 3
F javac compiler Allgemeine Java-Themen 2
I Compiler level - ant Allgemeine Java-Themen 7
B Suche einen guten Compiler Allgemeine Java-Themen 23
S Java Compiler spinnt oder auch nicht ? Allgemeine Java-Themen 5
W Compiler findet Pakete nicht. Allgemeine Java-Themen 2
7 Applet funktioniert einzig und allein im Compiler Allgemeine Java-Themen 12
M downloadproblem Jikes compiler Allgemeine Java-Themen 2
M Probleme mit Cross-Compiler Allgemeine Java-Themen 3
D Compiler Warnung, Generics, Eclipse 3.1 Allgemeine Java-Themen 6
V String[] wird nicht als Rückgabetyp vom Compiler akzeptiert! Allgemeine Java-Themen 6
M GNU Java Compiler unter Windows? Allgemeine Java-Themen 4
G Compiler Exception auf JTextArea umleiten Allgemeine Java-Themen 4
R Wo kriege ich einen JIT-Compiler her? Allgemeine Java-Themen 6
G Java.lang.Compiler Allgemeine Java-Themen 3
R FastJavac Compiler Allgemeine Java-Themen 2
I Problem mit Compiler? Allgemeine Java-Themen 2
N Compiler (javac) funktioniert nicht... Bitte hilfe! Allgemeine Java-Themen 3
R Compiler spinnt !?!? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben