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
*/