REGISTER.ID
返回指定的 DLL 或 代码资源注册过的函数 ID。如果 DLL 或 代码资源没有注册,这个函数将会注册它们,并返回 注册ID。
REGISTER.ID 可以用于工作表(不同于 REGISTER函数),但你不能在 REGISTER.ID 中指定函数名称和参数名称。更多关于 DLL 和代码资源以及数据类型的介绍,请查看 “使用 CALL 和 REGISTER 函数”
注意 因为 Windows 上的 Excel 程序和 苹果机上的 Excel 程序使用了不同的代码资源类型,REGISTER.ID 在两种系统上使用的语法,有一点区别。
Windows 语法
REGISTER.ID ( module_text, procedure, type_text )
参数说明
module_text 指定包含了一个DLL名称,DLL中包含了 Windows Excel 要使用函数代码。
Procedure 指定DLL中的函数名称。你也可以使用在DLL导出文件 .del 中关联的序号。
type_text 指定返回值和参数值的数据类型。第一个字母表示返回值类型。如果函数或代码资源已经注册,你可以省略这个参数。
实例
REGISTER.ID("Kernel32", "GetTickCount", "J!")
使用 CALL 和 REGISTER 函数
接下来,我们将描述,使用 CALL、REGISTER、REGISTER.ID 这三个函数时的参数和返回值类型。参数和返回值类型,根据你的操作系统环境,会有一点不同,这些不同在后面的数据类型表中有描述。
Excel 开发具包,包含了 DLL 、代码资源、Excel API、文件格式以及
其它一些 Excel 开发技术的内容。它还包含了开发自定义应用的代码示例和程序设计工具。你可以通过你的软件供应商或微软公司获取它。在美国,可以联系 微软开发服务团队 (800)227-4679 获取更多信息。
数据类型
CALL、REGISTER、REGISTER.ID 函数,type_text 参数指定了 DLL函数或代码资源中的返回值和参数值数据类型。 type_text 参数的第一个字符指定了返回值的类型。其余的字符表明所有参数的数据类型。例如,一个DLL函数返回了一个浮点数,并带有一个整型和浮点型参数,那么 type_text 参数就要设置为 “BIB”。
下表包含了,Excel 可以识别的完整数据列表,表中对每种数据类型都进行了详细的描述,以及 C 语言中的类型声明。
代码 | 描述 | 传送 | C 语言描述 |
A | 逻辑值(FALSE = 0,TRUE = 1) | Value | short int |
B | IEEE 8字节浮点数字 | Value | double |
C | 以空字符结尾的字符串 (字符串最大长度是255) | Reference | char * |
D | 字节计数字符串(第一个字节包含最大数量为255) | Reference | Unsigned char * |
E | IEEE 8字节浮点数字 | Reference | double * |
F | 以空字符结尾的字符串(字符串最大长度为255个字符) | Reference(modify in place) | char * |
G | 字节计数字符串(第一个字节描述了字符串的长度,字符串最大长度为255个字符) | Reference(modify in place) | Unsigned char * |
H | 无符号2字节整型 | Value | Unsigned short int |
I | 带符号2字节整型 | Value | short int |
J | 带符号4字节整型 | Value | short int |
K | 数组 | Reference | FP * |
L | 逻辑值(FALSE = 0),TRUE = 1 | Reference | short int * |
M | 带符号 2字节 整型 | 引用 | short int * |
N | 带符号 4字节 整型 | 引用 | long int * |
O | 数组 | Reference | 传递3个参数 unsigned short int * unsigned short int * |
P | OPER 数据结构 | Reference | OPER * |
R | XLOPER 数据结构 | Reference | XLOPER * |
备注
- C 语言声明是基于你的编译默认 8-byte doubles, 2-byte short integers, and 4-byte long integers 类型
- Windows 程序开发环境中,所有的指针都是远指针。例如,你可以使用 unsigned char far * 声明 D 数据类型。
- 所有DLL或代码资源中的函数都使用 Pascal 调用惯例。很多 C 编译器,允许你使用 Pascal 调用惯例。例如:
pascal void main(rows, columns, a) - 如果函数为它的返回值,使用传入引用数据类型,你可以传递 空返回指针。Excel 将会解释为 #NUM! 错误值。
更多数据类型信息
本节包含了 数据类型 F, G, K, O, P 和 R 数据类型的详细信息,以及 type_text 参数的其它信息。
F 和 G 数据类型
使用 F 和 G 数据类型,函数可以修改由 Microsft Excel 分配的字符串缓存。如果返回的数据类型为 F 或 G,Excel 将忽略函数返回值。然后 在函数的参数列表中从左到右依次查找到数据类型为 F 或 G 的参数,然后,将此参数的内容做为函数的返回值。Excel 为参数分配了 256 个字符,因此函数返回的字符串长度,会大于它接收到的字符串长度。
K 数据类型
K 数据类型指向一个可变长度的 FP 结构。结构原型如下:
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
double array[1] 声明只有一个元素的数组。实际上,数组中的元素数据等于 行的数量乘上列的数量。
O 数据类型
O 数据类型只能用于参数,不能用于返回值。它传送了3个内空:行数量的指针,列数量的指针,浮点类型二维数组指针。
代替返回值,函数可以编辑 O 数据类型传送的数组。为此,你可以使用 ">O" 作为 type_text 参数。
O 数据类型与 FORTRAN DLL 兼容,通过引用传递参数。
P 数据类型
P 数据类型指向 OPER 结构。 OPER 结构 包含8个字节的数据,随后的两个字节表示数据类型。通过 P 数据类型 DLL 函数或代码资源可以接收和返回任意一种 Excel 数据类型。
OPER 结构原型如下:
typedef struct _oper
{
union
{
double num;
unsigned char *str;
unsigned short int bool;
unsigned short int err;
struct
{
struct _oper *lparray;
unsigned short int rows;
unsigned short int columns;
} array;
} val;
unsigned short int type;
} OPER;
类型字段包括了下表中的一个值。
类型 | 描述 | 使用 |
---|---|---|
1 | Numeric | num |
2 | String(first byte contains length of string) | str |
4 | Boolean(logical) | bool |
16 |
Error: the error values are: 0 #NULL! 7 #DIV/0! 15 #Value! 23 #REF! 29 #NAME? 36 #NUM! 42 #N/A |
err |
64 | Array | array |
128 | Missing argument | |
256 | Empty cell |
最后二个值只能做为参数,不能用于返回值。当调用函数时缺少一个参数,就会使用 128 Missing argument 传送。当引用了一个空单元格时,就会传递 Empty cell(256) 。
R 数据类型
从 DLL 中调用 Excel 函数时使用,R 数据类型指向一个 XLOPER 结构,它是 OPER 的加强版本,在 Excel 4.0 和 后续版本中,当你在 DLL 中 调用 Excel 函数时可以使用 R 数据类型编写 。 通过 XLOPER 结构 DLL 函数可以传送 表引用 和实现 流程控制。更多关于 R 数据类型的内容,请查看 Microsoft Excel Developer's Kit
易失性函数和重计算
只有当一个函数输入到单元格后,Excel 就会对函数进行计算,当它的引用发生改变,可单元格在一个宏中进行了计算。在 工作表中,你可以让函数为 易失性 状态,易失性函数,无论何时在工作表的任意单元格中进行计算时,易失性函数都必须重新进行计算。非易失性函数只在输入变量改变时才重新计算,若不用于计算工作表单元格的用户自定义函数中,则此方法无效。要让函数为易失性的,要感叹号(!)做为参数的最生一个字符,例如:
CALL("Kernel32", "GetTickCount", "J!")
在适当的位置进行修改
您可以使用一个单一的数字n 作为 type_text 返回类型代码,其中n是一个数字从1到9。这告诉Microsoft Excel修改变量的位置指出type_text第n个参数,而不是返回一个值。这也被称为修改到位。第N个参数必须是一个引用传递数据类型(C,D,E,F,G,K,L,M,N,O,P,R). DLL函数或代码资源也必须宣布无效关键字的C语言的程序关键字(或Pascal语言)。
RegisteredFunctions 属性
返回一个数组,包含了 DLL 或 代码资源中的函数列表,它们使用 REGISTER 或 REGISTER.ID 函数注册。只读取。数组中的每一行都包含了单个函数的3项信息,见下表:
- DLL或代码资源名称
- DLL或代码资源中的过程名
- 指定返回的数据类型和参数类型
备注
如果这里没有注册函数。此属性返回 Null。使用 IsNull 函数可以测试返回的值是否是 Null。