Hej Robert.
Tak for dit svar!
Jeg er ingen super snu datalog - så jeg skal lige se om jeg forstår metoden.
Det der er muligt er, at jeg skriver en funktionalitet i f.eks. C++, som jeg gemmer som DLL.
Den funktionalitet kan jeg så bruge direkte fra Java?
Det lyder abstrakt i mine øre
Mvh,
Jonas
Hehe...det forstår jeg godt :-)
Det du gør, er at skrive hele applikationen i Java. Du skal så definere et interface, som kan "snakke sammen" med din DLL.
Jeg kender ikke til OLE, så jeg kan ikke give dig et helt konkret eksempel, men et "Hello World" program kunne se ca. således ud:
public class HelloNativeWorld {
private static native void sayHello();
public static void main(String args[]) {
System.loadLibrary("hello");
sayHello();
}
}
Det compiler du som et normalt Java program:
$ javac HelloNativeWorld.java
$ javah HelloNativeWorld
Den sidste kommando genererer en C header fil med følgende indhold:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNativeWorld */
#ifndef _Included_HelloNativeWorld
#define _Included_HelloNativeWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNativeWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNativeWorld_sayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
Du skal så implementere den specificerede funktion i f.eks. C:
#include "HelloNativeWorld.h"
JNIEXPORT void JNICALL Java_HelloNativeWorld_sayHello
(JNIEnv * env, jclass cl) {
printf("Hello World!\n");
}
C koden skal så compiles til et library (en DLL), men jeg er Linux bruger, så tag den hellere op i C/C++ foraet. Så er jeg sikker på at Bertel Brander eller en anden på 5 minutter kan vise dig resten.
For god ordens skyld, viser jeg resten, som det ser ud på min Linux box:
$ gcc -I/usr/lib/jvm/java-6-sun-1.6.0.13/include -I/usr/lib/jvm/java-6-sun-1.6.0.13/include/linux/ -shared -fPIC -o libhello.so HelloNativeWorld.c
$ ls -l libhello.so
-rwxr-xr-x 1 robert robert 9436 2009-04-23 22:42 libhello.so
$ LD_LIBRARY_PATH=. java HelloNativeWorld
Hello World!
$
That's it! :-)