第九章 创建Callout Library - 使用数字链接
第九章 创建Callout Library - 使用数字链接
为以下数据类型提供数字链接类型:
C Datatype | Input | In/Out | Notes |
---|---|---|---|
int | i | none (use P) | 指定 32 位整数。 i 链接类型仅用于输入。要返回整数类型,请使用 P 或 4P (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
创建输入值,并且必须将相应的输入链接指定为小写的 f
或 d
。
IRIS
支持 $DOUBLE
函数来创建标准 IEEE
格式 64
位浮点数。这些数字可以在外部函数和 IRIS
之间传递,而不会损失任何精度(除非外部函数使用 32
位浮点型而不是 64
位双精度型)。对于输出,通过将前缀字符 #
添加到 F
或 D
参数类型来指定使用 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!