Sunday, December 7, 2008

ஜாவா மற்றும் C++ மொழிகளை இணைத்து பயன்படுத்தல்

தற்போது உள்ள கணணி மொழிகளில் VB, ஜாவா, C++ ஆகியன அதிக திறனுடையதாக உள்ளன. இதில் VB, C++ ஆகியன platform dependent மொழிகளாக உள்ளன. இவை இரண்டும் ஜாவாவை விட வேகமாக இயங்கக்கூடியவை. ஜாவாவானது தூய ஒப்ஜெக்ட் ஒரியென்டெட் மொழியாகும். ஜாவாவானது பல நன்மையான வசதிகளை கொண்டிருப்பினும் கணணி வன்பொருட்களை, இயங்குதளத்தை கட்டுப்படுத்துவதற்கு இதில் உள்ள வசதிகள் போதுமானவை அல்ல. இந்த இடத்தில் மாத்திரம் ஜாவாவை C++ உடன் இணைத்து பயன்படுத்த வேண்டி வரும்.

ஜாவா நேட்டிவ் இன்டெர்பேஸ் (Java Native Interface - JNI) எனும் முறை மூலம் C++ மொழியில் தேவையான function களை எழுதி பின்னர் அதனை ஜாவா மொழியில் பயன்படுத்தலாம். C++ மொழியில் functions எழுதப்படும். பின்னர் அவை .dll கோப்பு ஆக மாற்றப்படும். DLL கோப்பிலுள்ள function களை ஜாவா மொழியில் பயன்படுத்த ஒரு இன்டெர்பேஸ் கிளாஸ் உருவாக்கப்பட்டு, அதனூடாக DLL கோப்பிலுள்ள function பயன்படுத்தப்படும்.

ஒரு சிறிய உதாரணம்.

1. கீழ்வருமாறு டைப் செய்து ஒரு ஜாவா கோப்பை உருவாக்குக (Nativeprint.java)

public class Nativeprint {
static {
System.loadLibrary("nativeprint") ;
}
public static native void printHello() ;
}

nativeprint எனப்படுவது DLL கோப்பின் பெயராகும்.

2. பின்னர் இதை கொம்பைல் செய்து C++ Header கோப்பு உருவாக்க வேண்டும்

javac Nativeprint.java
javah Nativeprint

Header கோப்பானது (Nativeprint.h) கீழ்வருமாறு உருவாக்கப்படிருக்கும்
-------------------------------------------------------------------------------
* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class Nativeprint */
#ifndef _Included_Nativeprint
#define _Included_Nativeprint
#ifdef __cplusplusextern "C" {
#endif
/*
* Class: Nativeprint
* Method: printHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Nativeprint_printHello(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
--------------------------------------------------------------------------------

#include என்பதை #include "jni.h"ஆக மாற்றுக

3. இப்போது VC++ இல் DLL கோப்பு உருவாக்கப்பட வே
ண்டும்

VC++ இல் nativeprint எனும் பெயரில் ஒரு Win32 Dinamic Link Library Project ஐ உருவாக்குக (Empty Project).

இப்போது Project > Add To Project > New மூலமாக ஒரு C++ மூல கோப்பினை (Source File) உருவாக்குக.

#include "jni.h"
#include "jni_md.h"
#include "Nativeprint.h"

JNIEXPORT void JNICALL Java_Nativeprint_printHello(JNIEnv *, jclass) {
printf("Hello From C++") ;
}

இதில் void என்பது function எதனையும் திருப்பி அனுப்பாது என்பதனையும் Nativeprint என்பது கிளாஸின் பெயரையும் printHello என்பது function பெயரையும் குறிக்கும்.

இப்போது உங்களுடைய JDK பிரதான டிரெக்டரி இல் include எனும் sub டிரெக்டரிக்கு இற்கு சென்று அங்கே jni.h எனும் கோப்பையும் அங்கிருந்து win32 எனும் sub டிரெக்டரியில் jni_md.h எனும் கோப்பையும் உங்களுடைய Project Folder இற்கு பிரதி செய்க. Nativeprint.h எனும் கோப்பையும் உங்களுடைய Project Folder இற்கு பிரதி செய்க.

இப்போது Project > Add To Project > File மூலமாக 3 கோப்புகளையும் தனித் தனியாக Project இனுள் சேர்த்து Project ஐ கொம்பைல் செய்து DLL கோப்பை உருவாக்குக.

4. இப்போது ஜாவா மொழி மூலம் DLL function ஐ பயன்படுத்தலாம் (Test.java)

கீழ் குறிப்பிட்டவாறு ஜாவா கோப்பை உருவாக்கி கொம்பைல் செய்து இயக்கி பயன்படுத்தலாம்.

public class Test {
public static void main(String[] args) {
Nativeprint.printHello() ;
}
}

இங்கே Nativeprint என்பது இன்டெர்பேஸ் கிலாஸின் பெயரும், printHello என்பது function இன் பெயருமாகும். இன்டெர்பேஸ் கிளாஸும் (Nativeprint.class), DLL கோப்பும் பிரதான கிளாஸும் (Test.class) ஒரே டிரெக்டரியில் இருக்க வேண்டும்.

Total Views