第九章 创建Callout Library - 使用数字链接

第九章 创建Callout Library - 使用数字链接

为以下数据类型提供数字链接类型:

C Datatype Input In/Out Notes
int i none (use P) 指定 32 位整数。 i 链接类型仅用于输入。要返回整数类型,请使用 P4P (int *)
int * p P 指向 32 位整数的指针。
_int64 8i none (use 8P) 指定 64 位整数。要返回 64 位整数类型,请使用 8P
_int64 * 8p 8P 指向 64 位整数的指针。
double * d D 使用#D(仅输出)返回基数 2 格式的双*
float * f F 使用#F(仅输出)返回基数 2 格式的浮点 *

当指定数字参数时, IRIS 允许输入参数为字符串。当传递一个字符串时,将从字符串中解析前导数字以得出数值。如果没有前导数字,则将收到值 0。因此,“2DOGS”被接收为 2.0,而“DOG”被接收为 0.0。整数参数被截断。例如,“2.1DOGS”被接收为 2

注意:保持浮点数的准确性

当输出链接由F(float *)D(double *)指定时,返回的数字将转换为内部基数10数字格式。要保留基数 2 格式的数字,请使用 #F 表示 float * 或使用 #D 表示 double *

输入参数不允许使用 # 前缀。为了避免转换(这可能会导致精度略有损失),必须在调用该函数的 ObjectScript 代码中使用 $DOUBLE 创建输入值,并且必须将相应的输入链接指定为小写的 fd

IRIS 支持 $DOUBLE 函数来创建标准 IEEE 格式 64 位浮点数。这些数字可以在外部函数和 IRIS 之间传递,而不会损失任何精度(除非外部函数使用 32 位浮点型而不是 64 位双精度型)。对于输出,通过将前缀字符 # 添加到 FD 参数类型来指定使用 IEEE 格式。例如,“i#D”指定具有一个整数输入参数和一个 64 位浮点输出参数的参数列表。

使用 C 链接类型传递以 Null 结尾的字符串

仅当知道 IRIS 不会发送包含空 ($CHAR(0)) 字符的字符串时,才应使用此链接类型。使用此数据类型时, C 函数将在第一个空字符处截断 IRIS 传递的字符串,即使该字符串实际上更长。例如,字符串“ABC”_$CHAR(0)_“DEF”将被截断为“ABC”

C Datatype Input In/Out Notes
char * 1c or c 1C or C 这是常见的 C NULL 终止字符串。
unsigned short * 2c or w 2C or W 这是一个 C 风格的 NULL 终止 UTF-16 字符串。
wchar t * 4c 4C 这是一个以 NULL 结尾的 C 风格字符串,存储为 wchar_t 元素的向量。

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

使用 C 链接传递以 null 结尾的字符串

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

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

int get_sample(char* retval) {
     // 8-bit, null-terminated
   sprintf(retval,"%d",(rand()%1000000));
   return ZF_SUCCESS;
}

int get_sample_W(unsigned short* retval) {
     // 16-bit, null-terminated
   swprintf(retval,6,L"%d",(rand()%1000000));
   return ZF_SUCCESS;
}

int get_sample_H(wchar_t* retval) {
     // 32-bit, null-terminated
   swprintf(retval,6,L"%d",(rand()%1000000));
   return ZF_SUCCESS;
}

ZFBEGIN
ZFENTRY("GetSample","1C",get_sample)
ZFENTRY("GetSampleW","2C",get_sample_W)
ZFENTRY("GetSampleH","4C",get_sample_H)
ZFEND

相关推荐

  1. 创建Callout Library - 使用数字

    2023-12-30 12:02:05       54 阅读
  2. 创建Callout Library - ZFentry 选项

    2023-12-30 12:02:05       60 阅读
  3. 创建

    2023-12-30 12:02:05       54 阅读
  4. 使用 kubectl 创建 Deployment

    2023-12-30 12:02:05       44 阅读
  5. Flask

    2023-12-30 12:02:05       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 12:02:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 12:02:05       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 12:02:05       82 阅读
  4. Python语言-面向对象

    2023-12-30 12:02:05       91 阅读

热门阅读

  1. API服务的快速搭建和测试

    2023-12-30 12:02:05       58 阅读
  2. 移动端手签-图片base64旋转功能

    2023-12-30 12:02:05       58 阅读
  3. 数据仓库系列01-规划篇

    2023-12-30 12:02:05       58 阅读
  4. MySQL存储引擎详解

    2023-12-30 12:02:05       66 阅读
  5. Zama TFHE-rs

    2023-12-30 12:02:05       56 阅读
  6. 数据分析流程

    2023-12-30 12:02:05       66 阅读