📄 dxobject.c
字号:
/* $Id: DxObject.c,v 1.1 1999/10/04 13:26:24 daniela Exp $ implemtation der native methode DxObject.invokeMethod()*/#include "DbxLib_DbxObject.h"#include <javaString.h>#include <interpreter.h>#include <string.h>char* signature (struct HDbxLib_DbxObject* this_h, char* method_name);int is_end_string (char* str1, char* str2);struct Hjava_lang_Object*DbxLib_DbxObject_invoke(struct HDbxLib_DbxObject* this_h, struct Hjava_lang_String* method_name_h, long argNum, struct Hjava_lang_Object* arg1_h, struct Hjava_lang_Object* arg2_h, struct Hjava_lang_Object* arg3_h) { ExecEnv* ee = EE(); ClassDbxLib_DbxObject* this = unhand (this_h); char* method_name = makeCString (method_name_h); char* sig = signature (this_h, method_name); HObject* ans = NULL; /*konnte signatur fuer methode ermittelt werden? */ if (sig == NULL) { SignalError (ee, "DbxLib/MethodNotFoundExc", NULL); return NULL; } switch (argNum) { case 0: ans = (HObject*)execute_java_dynamic_method (ee, (HObject*)this_h, method_name, sig); break; case 1: ans = (HObject*)execute_java_dynamic_method (ee, (HObject*)this_h, method_name, sig, arg1_h); break; case 2: ans = (HObject*)execute_java_dynamic_method (ee, (HObject*)this_h, method_name, sig, arg1_h, arg2_h); break; case 3: ans = (HObject*)execute_java_dynamic_method (ee, (HObject*)this_h, method_name, sig, arg1_h, arg2_h, arg3_h); break; } if (exceptionOccurred(ee)) { SignalError (ee, "DbxLib/MethodInvokeExc", NULL); return NULL; } return ans; }/* Achtung: sig11, wenn methode nicht existiert!*/char* signature (struct HDbxLib_DbxObject* this_h, char* method_name) { struct methodtable* mtable = this_h->methods; // int method_num = mtable->classdescriptor->methods_count; char name[256]; int i = 0; mangleMethodName (mtable->methods[++i], name, 256, NULL); while (!strstr(name, method_name)) mangleMethodName (mtable->methods[++i], name, 256, NULL); return mtable->methods[i]->fb.signature; } /* true, wenn str1 mit str2 abschliesst*/int is_end_string (char* str1, char* str2) { int pos1 = strlen (str1) - 1; int pos2 = strlen (str2) - 1; if (pos2 > pos1) return 0; while (pos2 >= 0) { if (str1[pos1--] != str2[pos2--]) return 0; } return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -