⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxobject.c

📁 用Java写的面相对象的数据库管理系统
💻 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 + -