niedziela, grudnia 27, 2009

JNA, czyli w Java'ie też można :-)

OK, wychodzi na to, że z JNA w Java'ie też dość prosto się da używać kod natywny :-) [w C# używamy DllImport] W każdym bądź razie prościej niż z JNI.

W C mamy kod [projekt, który ma stworzyć DLLkę, ale to jest najważniejszy kod]:
DLLIMPORT void helloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}


A w Java'ie:
import com.sun.jna.Library;
import com.sun.jna.Native;


public class JNATest {

interface HelloWorld extends Library {
void helloWorld();
}

public static void main(String... args) {
HelloWorld helloWorld =
(HelloWorld)Native.loadLibrary(
"Project1", HelloWorld.class
);
helloWorld.helloWorld();
}
}


Nadal jest jednak trudniej niż w C#, i to chyba dobrze bo dzięki temu zbyt często programiści piszący w Java'ie nie próbują wybierać rozwiązań natywnych.
Jak się wydaje wielu ludzi piszących w C# z lubością używa kodu natywnego i przez to .NET tracie na przenośności.

Btw. przy kodzie natywnym dobrze znać architekturę procesora. Żeby ją poznać musimy odczytać wartość właściwości systemowej "os.arch", co osiągniemy przez wywołanie System.getProperty("os.arch"). Dla x86 wartością będzie x86, dla x64 wartością będzie amd64.


Podobne postybeta
C# miewa swoje plusy ;-)
"CPUInfo" w Java :-)
Język Go dla Windows :-)
A gdyby tak JNI bez JNI? ;-)
Pomysł - przypinajne TODO ;-)