最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

4GL与C的关系

开发相关 bron1984 7392浏览

15-1 STACK 的处理

INFORMIX-4GL 和C之间数据的传送,是利用数据结构中 stack 的技巧来达成两者之间的运作。

<语法格式>

CALL function_name(arg1,arg2,...argn)

15-2 呼叫的协议

.当 informix-4gl 呼叫C时,会将函数中的参数由左至右压入(PUSH) STACK中 ,并把参数的个数也传给C。而C必须在 STACK 中依相反的次序 POP 所有的参数。

.当C欲传回变量给 informix-4gl 时,参数的压入顺序必须与 4gl 中 returning参数的顺序相同。也就是说,无论是在个数或数据型态都必须和 returning 参数的顺序一致。

15-3 4GL与C的界面函数

┌──────┬─────┬──────────┬──────────────┐

│  数据型态  │  定义 │ POPPING 函数   │ PUSHING 函数  │

├──────┼─────┼──────────┼──────────────┤

│  int       │    i        │ popint(&i)       │  retint(i)                  │

│  short   │    s       │ popshort(&s)   │  retshort(s)             │

│  long    │    l       │ poplong(&l)     │  retlong(l)               │

│  float    │    f       │ popflo(&f)        │  retflo(&f)              │

│  double│    d      │ popdub(&d)     │  retdub(&d)           │

│  char    │  str[m] │ popquote(str,m)│  retquote(str)       │

└──────┴─────┴──────────┴──────────────┘

记得在C中的最后一行叙述要加一个 return,而在 return 中唯一的参数是用来传递欲被传回的个数,即使没有传回参数也要 return(0)。

§例:

CALL bankopen(account_no,3,salary,"bankdisk.txt") 
  
#include <stdio.h> 
FILE *fopen(), *fp; 
  
static int Is_Open  = 1; 
static int serial_no = 0; 
bankopen(n) 
    int n; 
{ 
  int net_income,summary_ty,i,j,len; 
  char account_no[8],a[8],bank_file[12],open_file[12]; 
  
  serial_no++; 
    if    (n != 4) 
          exit(1); 
    popquote(bank_file,12); 
    popint(&net_income); 
    popint(&summary_ty); 
    popquote(account_no,8); 
  len = strlen(bank_file); 
  if  (Is_Open)  { 
      fp = fopen(bank_file,"w"); 
      Is_Open = 0; 
  } 
  fprintf(fp," %06d 03",serial_no); 
  len = strlen(account_no); 
  for (i = 0; i < len; i++) 
      if  (isdigit(account_no[i])) { 
          a[i] = account_no[i]; 
      } 
      else { 
          a[i] = '\0'; 
          break; 
      } 
  len = 7 - strlen(a); 
  for (i = 0; i < len; i++) 
       fprintf(fp,"0"); 
  fprintf(fp,"%s ",a); 
  switch (summary_ty) { 
      case 1 : fprintf(fp,"PM"); 
               break; 
      case 2 : fprintf(fp,"PR"); 
               break; 
      case 3 : fprintf(fp,"TH"); 
               break; 
  } 
  if  (net_income > 0) 
       fprintf(fp," C %08d\n",net_income); 
  else 
       fprintf(fp," D %08d\n",net_income); 
    return 0; 
}

 

转载请注明:赫非域 » 4GL与C的关系