Java:

public class StaticFieldAccess
{
	private static int si;
	private native void accessField();
	public static void main(String args[])
	{
		StaticFieldAccess c = new StaticFieldAccess();
		StaticFieldAccess.si = 100;
		c.accessField();
		System.out.println("In Java:");
		System.out.println(" StaticFieldAccess.si = " + si);
	}
	static
	{
		System.loadLibrary("StaticFieldAccess");
	}
}



C++:

#include "StaticFieldAccess.h"
#include <cstdio>
JNIEXPORT void JNICALL Java_StaticFieldAccess_accessField
(JNIEnv *env, jobject jobj)
{
	jfieldID fid; /* store the field ID */
	jint si;
	/* Get a reference to obj’s class */
	jclass cls = env->GetObjectClass(jobj);
	printf("In C++:\n");
	/* Look for the static field si in cls */
	fid = env->GetStaticFieldID(cls, "si", "I");
	if (fid == NULL)
	{
		return; /* field not found */
	}
	/* Access the static field si */
	si = env->GetStaticIntField(cls, fid);
	printf(" StaticFieldAccess.si = %d\n", si);
	env->SetStaticIntField(cls, fid, 200);
}
/*
cl -I%java_inc% -I%java_inc%\win32 -LD StaticFieldAccess.cpp -FeStaticFieldAccess.dll
*/


C:


#include "StaticFieldAccess.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_StaticFieldAccess_accessField
(JNIEnv *env, jobject jobj)
{
	jfieldID fid; /* store the field ID */
	jint si;
	/* Get a reference to obj’s class */
	jclass cls = (*env)->GetObjectClass(env, jobj);
	printf("In C:\n");
	/* Look for the static field si in cls */
	fid = (*env)->GetStaticFieldID(env, cls, "si", "I");
	if (fid == NULL)
	{
		return; /* field not found */
	}
	/* Access the static field si */
	si = (*env)->GetStaticIntField(env, cls, fid);
	printf(" StaticFieldAccess.si = %d\n", si);
	(*env)->SetStaticIntField(env, cls, fid, 200);
}
/*
cl -I%java_inc% -I%java_inc%\win32 -LD StaticFieldAccess.c -FeStaticFieldAccess.dll
*/