Know more about the native codes . Try out these programs and if you want to refer to the basics move to the previous page.


Program 1

aaa.java
	class aaa
	{      public static void main(String s[])
		{      bbb a;
			System.out.println("Start");
	
      	          	a = new bbb();
            	    	System.out.println("Before xx");
		
            	    	a.xx();
                  	System.out.println("After xx");
	       }
	}
	
	class bbb
	{      public native void xx();
	       public bbb()
	       {
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}

sss.c
#include <windows.h>
void *Java_bbb_xx_stub(void * p)
{       MessageBox(0,"Hi","Hi",0);
        return p;
}


sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub       

The Files to be included in the Project are
sss.c
user32.lib

Program 2

aaa.java
	class aaa
	{      public static void main(String s[])
		{      bbb a;
      	          	a = new bbb();
            	    	a.xx();
                        System.out.println("After xx");
	       }
	}
	
	class bbb
	{      public native void xx();
	       public bbb()
	       {
                      System.out.println("in bbb Constructor");
                      System.loadLibrary("sss");
	       }
	}

sss.c

void * Java_bbb_xx_stub(void *z,void *e)
{	
    bbb_xx();
    return z;
}

long  bbb_xx()
{
	printf("in bbb .. xx - Hi\n");
	return 1;
}

sss.def

LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub    

Program 3

aaa.java
	class aaa
	{      public static void main(String s[])
		{      bbb a;
      	          	a = new bbb();
            	    	a.xx();
                        System.out.println("After xx ");
	       }
        }
	class bbb
	{
               int a , b;
               public native void xx();
	       public bbb()
	       {
                      a=10;
                      b=20;
                      System.out.println("in bbb Constructor");
                      System.loadLibrary("sss");
	       }
	}

sss.c
#include <StubPreamble.h>                                                                                   
struct zzz
{
	long x,y;
};

struct yyy
{
	struct zzz *o;
    void * m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void * e)
{	
        printf("The sizeof stack_item..%d\n",sizeof(stack_item));
        bbb_xx(z->p);
	return z;
}

long  bbb_xx(struct yyy * t)
{
	printf("in bbb .. xx - Hi\n");
        printf("Value of x %ld\n",t->o->x);
        printf("Value of y %ld\n",t->o->y);
	return 1;
}

sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub
In the Options Tools Directory

D:\Java\Include

D:\Java\Include\Win32

Program 4

aaa.java
	class aaa
	{      public static void main(String s[])
                {       bbb a;
      	          	a = new bbb();
                        System.out.println("After a..."+a.a);
                        a.xx();
                        System.out.println("After a..."+a.a);
	       }
	}
	
	class bbb
	{
               int a , b;
               public native int xx();
	       public bbb()
	       {
                      a=10;
                      b=20;
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}

sss.c
#include <StubPreamble.h>
struct zzz
{
	long x,y;
};

struct yyy
{
	struct zzz *o;
        void *m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void *e)
{	
	
        bbb_xx(z->p);
	return z+1;
}

long  bbb_xx(struct yyy * t)
{
	printf("in bbb .. xx - Hi\n");
        printf("Value of x %ld\n",t->o->x);
        printf("Value of y %ld\n",t->o->y);
        t->o->x = 200;
	return 1;
}

sss.def

LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub    

Program 5

aaa.java
	class aaa
	{      public static void main(String s[])
                {       int i;
                        bbb a;
      	          	a = new bbb();
                        i=a.xx();
                        System.out.println("i = Return of xx =" + i);
	       }
	}
	
	class bbb
	{
               int a , b;
               public native int xx();
	       public bbb()
	       {
                      a=10;
                      b=20;
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}

sss.c
#include <StubPreamble.h>
struct zzz
{
	long x,y;
};

struct yyy
{
	struct zzz *o;
        void *m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void *e)
{	
        z->i=bbb_xx(z->p);
	return z+1;
}

long  bbb_xx(struct yyy * t)
{
	printf("in bbb .. xx - Hi\n");
        printf("Value of x %ld\n",t->o->x);
        printf("Value of y %ld\n",t->o->y);
	return 200;
}

sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub       

Program 6

aaa.java
	class aaa
	{      public static void main(String s[])
                {       int i;
                        bbb a;
                        a = new bbb();
                        a.xx(200);
                        System.out.println("After xx");
	       }
	}
	
	class bbb
	{
               int a , b;
               public native int xx(int p);
	       public bbb()
	       {
                      a=10;
                      b=20;
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}
sss.c
#include <StubPreamble.h>
struct zzz
{
	long x,y;
};

struct yyy
{
	struct zzz *o;
	void *m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void *e)
{	
	
        bbb_xx(z->p,z[1].i);
	return z+1;
}

long  bbb_xx(struct yyy * t,long u)
{
	printf("in bbb .. xx - Hi\n");
	printf("Value of u - %d\n",u);
	return 1;
}

sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub       

Program 7

aaa.java
	class aaa
	{      public static void main(String s[])
                {       
                        bbb a;
                        a = new bbb();
                        System.out.println("Value of a.."+a.a+"..b.."+a.b);
                        a.xx(200,3);
                        System.out.println("After xx");
                        System.out.println("Value of a.."+a.a+"..b.."+a.b);
	       }
	}
	
	class bbb
	{
              int a,b;
               public native int xx(int p,int q);
	       public bbb()
               {      a=10;
                      b = 20;
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}

sss.c
#include <StubPreamble.h>
struct zzz
{
	long x,y;
};

struct yyy
{
	struct zzz *o;
	void *m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void *e)
{	
	
        bbb_xx(z->p,z[1].i,z[2].i);
	return z;
}

long  bbb_xx(struct yyy * t,long u,long v)
{
	printf("in bbb .. xx - Hi\n");
	printf("Value of u-%d..v-%d\n",u,v);
        t->o->x=u;
        t->o->y=v;
	return 1;
}

sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub    

Program 8

aaa.java
class aaa
{
        public static void main(String s[])
        {       byte t[];
                bbb b;
                int c=0;

                b = new bbb("a.txt");
                t = new byte[1];
                b.xx();

                System.out.println("After open");

                while (b.yy(t,1) == 1)
                c++;
                
                System.out.println("No. of characters."+c);
        }
}

class bbb {
    String s;
    int d;
    public bbb(String p)
    {
        System.out.println("in constructor");
        System.loadLibrary("sss");
        s=p;
    }
    public native boolean xx();
    public native int yy (byte b[], int l);
}

sss.c

#include <StubPreamble.h>
#include <fcntl.h>

struct zzz
{
        struct Hjava_lang_String * p;
        long f;
};

struct yyy
{
        struct zzz * o;
        void * m;
};

long bbb_xx(struct yyy * t)
{
        int g;
        char u[1000];
        javaString2CString(t->o->p,u,1000);
        g = open(u,O_RDONLY);
        printf("After open\n");
        t->o->f = g;
        printf("File handle g=%d...\n",g);
        return 1;
}

struct pp
{
    char b[1];
};

struct qq
{
struct pp * o;
void *m;
} ;

long bbb_yy(struct yyy * t,struct qq * v, long c)
{
        char  *d = v->o->b;
      	int q = c;
        q = read(t->o->f,d,q);
        if(q == 0)
                return (-1);
        printf("No. of char q=%d...Character *d=%c\n",q,*d);
        return (q);
}

stack_item * Java_bbb_xx_stub(stack_item * z, void *e)
{
        bbb_xx(z->p);
        return z + 1; 
}

stack_item * Java_bbb_yy_stub(stack_item * z, void * e)
{
        z->i=bbb_yy(z->p,((z[1].p)),((z[2].i)));
        return z + 1; 
}

sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub
        Java_bbb_yy_stub

OR

__declspec (dllexport) stack_item * Java_bbb_xx_stub(stack_item * z, void *e)
{
bbb_xx(z->p);
return z + 1; 
}

__declspec (dllexport) stack_item * Java_bbb_yy_stub(stack_item * z, void * e)
{
z->i=bbb_yy(z->p,((z[1].p)),((z[2].i)));
return z + 1; 
}
There is no need for exporting these functions in the .def file.

Project Files will be
sss.c
javai.lib


Program 9

aaa.java
	class aaa
	{      public static void main(String s[])
                {       
                        bbb b;
                        b = new bbb();
                        b.xx();
	       }
	}
	class bbb
	{
              int a;
               public native int xx();
	       public bbb()
               {      a=10;
                      System.out.println("in bbb Constructor");
                      System.loadLibrary("sss");
	       }
               public void ppp()
               {
               System.out.println("In ppp");
               }
               public void qqq()
               {
               System.out.println("In qqq");
               }
	}

sss.c
#include <StubPreamble.h>
struct mt 
{
    struct ClassClass *c;
    void *md[1];
};

struct zzz
{
	long x;
};

struct yyy
{
	struct zzz *o;
	struct mt *m;
};

stack_item * Java_bbb_xx_stub(stack_item *z,void  *e)
{	
        bbb_xx(z->p);
	return z;
}

long  bbb_xx(struct yyy * t)
{
    printf("in bbb .. xx - Hi\n");
    printf (" Name... %s\n",t->m->c->name);
    printf ("Super Name.....%s\n",t->m->c->super_name);
    printf("Source Name ...%s\n",t->m->c->source_name);
    printf ("Methods count ..%d\n",t->m->c->methods_count);
    printf ("Fields count....%d\n",t->m->c->fields_count);       
    printf ("Access .....%d\n",t->m->c->access);
    printf("Flags....%d\n",t->m->c->flags);
    return 1;
}

sss.def

LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub      

Output

in bbb Constructor
in bbb .. xx - Hi
Name...bbb
Super Name.....java/lang/Object
Source Name... aaa.java
Methods count ..4
Fields count ....1
Access .....0
Flags....18

Program 10

aaa.java

	class aaa
	{      public static void main(String s[])
                {       
                        bbb a;
                        a = new bbb();
                        a.xx();
	       }
	}
	
	class bbb
	{
              int a;
              int b;
              
               public native int xx();

               public bbb()
               {      a=10;
                      b = 30;
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }

               public void ppp()
               {
               System.out.println("In ppp");
               }
               public void qqq()
               {
               System.out.println("In qqq");
               }

	}
sss.c
#include sss.def
LIBRARY     sss
EXPORTS
        Java_bbb_xx_stub       

Program 11

The above programs have been simplified for better understanding. But the programs can be created following these steps too

.

Step 1:

Create the file aaa.java with the following code
      class aaa
	{      public static void main(String s[])
		{      bbb a;
			System.out.println("Start");
	
      	          	a = new bbb();
            	    	System.out.println("Before xx");
		
            	    	a.xx();
                  	System.out.println("After xx");
	       }
	}
	class bbb
	{      public native void xx();
	       public bbb()
	       {
                      System.out.println("in bbb");
                      System.loadLibrary("sss");
	       }
	}

Step 2:javac aaa.java

        Output          
			aaa.class
			bbb.class
 

Step 3:javah aaa

        Output          Error:
                        java.lang.Object not found:aborting

Step 4:set CLASSPATH=d:\java\lib\classes.zip

Step 5:javah aaa

        Output          Error:
                        aaa: no such class

Step 6:set CLASSPATH=..;d:\java\lib\classes.zip

Step 7:javah aaa

        Output
		aaa.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <native.h>
/* Header for class aaa */

#ifndef _Included_aaa
#define _Included_aaa

typedef struct Classaaa {
    char PAD;	/* ANSI C requires structures to have a least one member */
} Classaaa;
HandleTo(aaa);

#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif

Step 8:javah bbb

        Output
		bbb.h 
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <native.h>
/* Header for class bbb */

#ifndef _Included_bbb
#define _Included_bbb

typedef struct Classbbb {
    char PAD;	/* ANSI C requires structures to have a least one member */
} Classbbb;
HandleTo(bbb);

#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) void bbb_xx(struct Hbbb *);
#ifdef __cplusplus
}
#endif
#endif

Step 9:javah -stubs aaa

        Output
		aaa.c
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <StubPreamble.h>

/* Stubs for class aaa */

Step 10:javah -stubs bbb

        Output
		bbb.c
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <StubPreamble.h>

/* Stubs for class bbb */
/* SYMBOL: "bbb/xx()V", Java_bbb_xx_stub */
__declspec(dllexport)stack_item*Java_bbb_xx_stub(stack_item *_P_,struct execenv *_EE_){
	extern void bbb_xx(void *);
	(void) bbb_xx(_P_[0].p);
	return _P_;
}

Step 11:

Create a file called sss.c
        void bbb_xx(void *a)
        {
                printf ("In File sss - bbb-xx\n");
        }
Project Files should be aaa.c, bbb.c, sss.c Build a DLL Copy the DLL from the WinDebug directory to the current directory.

Step 12:java aaa

        Output
                In Start
                Before xx
                In File sss - bbb-xx
                After xx


Feel free to send us your comments , feedback , suggestions which are most welcomed. Tell us how we can improvise the tutorial.

Back to the Java Page


Vijay Mukhi's Computer Institute
B-13, Everest Building, Tardeo, Bombay 400 034, India.
http://www.neca.com/~vmis
e-mail : vmukhi@giasbm01.vsnl.net.in
1