关于jni的,大家都过来看看把,帮帮忙!
已经定义好MemoryStatus.java
public class MemoryStatus {
long length;
long memory;
long totalPhys;
long availPhys;
long totalPageFile;
long availPageFile;
long totalVirtual;
long availVirtual;
public native void getMemory();
static{
System.loadLibrary("memory");
}
public static void main(String arg[]){
MemoryStatus test=new MemoryStatus();
test.getMemory();
System.out.print(""+test.totalPageFile);
}
}
已经编译好MemoryStatus.h,也编译好了memory.dll。可放在同一目录下后
java -classpath . MemoryStatus后还是报错!
大家看看把!能不能看看怎么过去呀!
cpp原程序如下
#include "MemoryStatus.h"
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define DIV 1024
JNIEXPORT void JNICALL Java_MemoryStatus_getMemory(JNIEnv* env,jobject this_obj){
jclass this_class;
jfieldID id_memory;
jfieldID id_totalPhys;
jfieldID id_availPhys;
jfieldID id_totalPageFile;
jfieldID id_availPageFile;
jfieldID id_totalVirtual;
jfieldID id_availVirtual;
MEMORYSTATUS caculate;
GlobalMemoryStatus(&caculate);
this_class=(*env).GetObjectClass(this_obj);
id_memory=(*env).GetFieldID(this_class,"memory","J");
id_totalPhys=(*env).GetFieldID(this_class,"totalPhys","J");
id_availPhys=(*env).GetFieldID(this_class,"availPhys","J");
id_totalPageFile=(*env).GetFieldID(this_class,"totalPageFile","J");
id_availPageFile=(*env).GetFieldID(this_class,"availPageFile","J");
id_totalVirtual=(*env).GetFieldID(this_class,"totalVirtual","J");
id_availVirtual=(*env).GetFieldID(this_class,"availVirtual","J");
(*env).SetLongField(this_class,id_memory,caculate.dwMemoryLoad);
(*env).SetLongField(this_class,id_totalPhys,caculate.dwTotalPhys);
(*env).SetLongField(this_class,id_availPhys,caculate.dwAvailPhys);
(*env).SetLongField(this_class,id_totalPageFile,caculate.dwTotalPageFile);
(*env).SetLongField(this_class,id_availPageFile,caculate.dwAvailPageFile);
(*env).SetLongField(this_class,id_totalVirtual,caculate.dwTotalVirtual);
(*env).SetLongField(this_class,id_availVirtual,caculate.dwAvailVirtual);
}