#include #include #include #include #include "gridlabd.h" //#include "myclass.h" #define MODULENAME "JavaModule" #define MAJOR 1 #define MINOR 0 static JNIEnv *jnienv = NULL; EXPORT CLASS *javainit(CALLBACKS *fntable, MODULE *module, int argc, char *argv[], JNIEnv *env) { // set the GridLAB core API callback table callback = fntable; // set the JNI Environment pointer jnienv = env; jclass cls = jnienv->FindClass(MODULENAME); // init is int (*)(long, int, String[]) jmethodID init_mid = env->GetStaticMethodID(cls, "init", "(JI[Ljava/lang/String;)I"); if(cls == NULL) return NULL; if(init_mid == NULL) return NULL; jobjectArray args = env->NewObjectArray(argc, jnienv->FindClass("[Ljava/lang/String;"), NULL); if(args == NULL) return NULL; jstring jargv[argc]; for(int i = 0; i < argc; ++i){ jargv[i] = env->NewStringUTF(argv[i]); jnienv->SetObjectArrayElement(jargv[i], i, args); } jnienv->CallStaticIntMethod(cls, init_mid, (long long)module, argc, jargv); // TODO: register each object class by creating its first instance //new myclass(module); // always return the first class registered //return myclass::oclass; // JNI cleanup jnienv->DeleteLocalRef(jobjectArray); for(int i = 0; i < argc; ++i) ; /* delete the strings */ return NULL; } CDECL int do_kill() { // if anything needs to be deleted or freed, this is a good time to do it return 0; } #if 0 public static int check(){ return 0; } public static int import_file(String filename){ return 0; } public static int export_file(String filename){ return 0; } public static int setvar(String varname, String value){ return 0; } public static int module_test(int argc, String[] argv){ return 0; } public static int cmdargs(int argc, String[] argv){ return 0; } /* returns a string to fprintf into the C-side stub */ public static String kmldump(long object_addr){ return ""; } #endif /* EOF */