第十章 创建Callout Library - 使用 B 链接类型传递短计数字符串

2023-12-31 19:04:36

第十章 创建Callout Library - 使用 B 链接类型传递短计数字符串

使用 B 链接类型传递短计数字符串

iris-cdzf.h Callout 头文件定义了计数字符串结构 ZARRAYZWARRAYZHARRAY,表示短字符串(InterSystems 旧字符串类型)。这些结构包含一个字符元素数组(分别为 8 位、16Unicode32wchar t)和一个指定数组中元素数量的短整数(最大值 32,768)。例如:

typedef struct zarray {
    unsigned short len;
    unsigned char data[1]; /* 1 is a dummy value */
   } *ZARRAYP;
  • len — 包含数组的长度
  • data — 是包含字符数据的数组。 ZARRAY 的元素类型为 unsigned charZWARRAY 的元素类型为 unsignedshortZHARRAY 的元素类型为 wchar_t

B 链接指定指针类型 ZARRAYPZWARRAYPZHARRAYP,对应于三个数组结构。返回的数组的最大大小为 32,767 个字符。

C DatatypeInputIn/OutNotes
ZARRAYP1b or b1B or B最多包含 32,7678 位字符的国家短字符串。
ZWARRAYP2b or s2B or S最多包含 32,76716 位字符的短 Unicode 字符串。
ZHARRAYP4b4B最多包含 32,767wchar_t 字符的短 Unicode 字符串。

参数的最大总长度取决于每个字符的字节数(请参阅“配置 $ZF 堆”)。

这是一个 Callout 库,它使用所有三种链接类型来返回数字字符串:

使用 B 连接传递计数字符串

以下三个函数均生成一个随机整数,将其转换为最多包含 6 位数字的数字字符串,并使用 B 链接返回字符串 。

#define ZF_DLL   // Required when creating a Callout library.
#include <iris-cdzf.h>
#include <stdio.h>
#include <wchar.h>   // Required for 16-bit and 16-bit characters

int get_sample_Z(ZARRAYP retval) {  // 8-bit, counted
   unsigned char numstr[6];
   sprintf(numstr,"%d",(rand()%1000000));
   retval->len = strlen(numstr);
   memcpy(retval->data,numstr,retval->len);
   return ZF_SUCCESS;
}

int get_sample_ZW(ZWARRAYP retval) {  // 16-bit, counted
   unsigned short numstr[6];
   swprintf(numstr,6,L"%d",(rand()%1000000));
   retval->len = wcslen(numstr);
   memcpy(retval->data,numstr,(retval->len*sizeof(unsigned short)));
   return ZF_SUCCESS;
}

int get_sample_ZH(ZHARRAYP retval) {  // 32-bit, counted
   wchar_t numstr[6];
   swprintf(numstr,6,L"%d",(rand()%1000000));
   retval->len = wcslen(numstr);
   memcpy(retval->data,numstr,(retval->len*sizeof(wchar_t)));
   return ZF_SUCCESS;
}


ZFBEGIN
ZFENTRY("GetSampleZ","1B",get_sample_Z)
ZFENTRY("GetSampleZW","2B",get_sample_ZW)
ZFENTRY("GetSampleZH","4B",get_sample_ZH)
ZFEND

注意:逗号在包含多个值的输出参数字符串中用作分隔符。由于逗号也可以是计数字符串数组的一部分,因此请在参数列表的末尾声明这些数组,并在每次调用时使用一个数组。

文章来源:https://blog.csdn.net/yaoxin521123/article/details/135317374
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。