The following describes the argument and return value data types used by the
CALL, REGISTER, and REGISTER.ID functions. Arguments and return values differ
slightly depending on your operating environment, and these differences are
noted in the data type table.
The following table contains a complete list of the data type codes that Microsoft Excel recognizes, a description of each data type, how the argument or return value is passed, and a typical declaration for the data type in the C programming language.
Remarks
F and G Data Types
With the F and G data types, a function can modify a string buffer that is allocated by Microsoft Excel. If the return value type code is F or G, then Microsoft Excel ignores the value returned by the function. Instead, Microsoft Excel searches the list of function arguments for the first corresponding data type (F or G) and then takes the current contents of the allocated string buffer as the return value. Microsoft Excel allocates 256 bytes for the argument, so the function may return a larger string than it received.
K Data Type
The K data type uses a pointer to a variable-size FP structure. You must define this structure in the DLL or code resource as follows:
O Data Type
The O data type can be used only as an argument, not as a return value. It passes three items: a pointer to the number of rows in an array, a pointer to the number of columns in an array, and a pointer to a two-dimensional array of floating-point numbers.
Instead of returning a value, a function can modify an array passed by the O data type. To do this, you can use ">O" as the type_text argument. For more information, see "Modifying in Place — Functions Declared as Void" below.
The O data type was created for direct compatibility with Fortran DLLs, which pass arguments by reference.
P Data Type
The P data type is a pointer to an OPER structure. The OPER structure contains 8 bytes of data, followed by a 2-byte identifier that specifies the type of data. With the P data type, a DLL function or code resource can take and return any Microsoft Excel data type.
The OPER structure is defined as follows:
typedef struct _oper
The last two values can be used only as arguments, not return values. The
missing argument value (128) is passed when the caller omits an argument. The
empty cell value (256) is passed when the caller passes a reference to an empty
cell.
R Data Type — Calling Microsoft Excel Functions from DLLs
The R data type is a pointer to an XLOPER structure, which is an enhanced version of the OPER structure. In Microsoft Excel version 4.0 and later, you can use the R data type to write DLLs and code resources that call Microsoft Excel functions. With the XLOPER structure, a DLL function can pass sheet references and implement flow control, in addition to passing data. A complete description of the R data type and the Microsoft Excel application programming interface (API) is beyond the scope of this topic. The Microsoft Office XP Developer's Guide contains detailed information about the R data type, the Microsoft Excel API, and many other technical aspects of Microsoft Excel.
Volatile Functions and Recalculation
Microsoft Excel usually calculates a DLL function (or a code resource) only when it is entered into a cell, when one of its precedents changes, or when the cell is calculated during a macro. On a worksheet, you can make a DLL function or code resource volatile, which means that it recalculates every time the worksheet recalculates. To make a function volatile, add an exclamation point (!) as the last character in the type_text argument.
For example, in Microsoft Excel for Windows, the following worksheet formula recalculates every time the worksheet recalculates:
You can use a single digit n for the return type code in type_text, where n is a number from 1 to 9. This tells Microsoft Excel to modify the variable in the location pointed to by the nth argument in type_text, instead of returning a value. This is also known as modifying in place. The nth argument must be a pass-by-reference data type (C, D, E, F, G, K, L, M, N, O, P, or R). The DLL function or code resource must also be declared with the void keyword in the C language (or the procedure keyword in the Pascal language).
For example, a DLL function that takes a null-terminated string and two pointers to integers as arguments can modify the string in place. Use "1FMM" as the type_text argument, and declare the function as void.
Versions prior to Microsoft Excel 4.0 used the > character to modify the first argument in place; there was no way to modify any argument other than the first. The > character is equivalent to n = 1 in Microsoft Excel version 4.0 and later.
call Function data type code for register. id data type codes for call Register Function register.id function xl
Data Types
In the CALL, REGISTER, and REGISTER.ID functions, the type_text argument specifies the data type of the return value and the data types of all arguments to the DLL function or code resource. The first character of type_text specifies the data type of the return value. The remaining characters indicate the data types of all the arguments. For example, a DLL function that returns a floating-point number and takes an integer and a floating-point number as arguments would require "BIB" for the type_text argument.The following table contains a complete list of the data type codes that Microsoft Excel recognizes, a description of each data type, how the argument or return value is passed, and a typical declaration for the data type in the C programming language.
Code | Description | Pass by | C Declaration |
---|---|---|---|
A | Logical (FALSE = 0), TRUE = 1) |
Value | short int |
B | IEEE 8-byte floating-point number | Value (Windows) Reference (Macintosh) |
double (Windows) double * (Macintosh) |
C | Null-terminated string (maximum string length = 255) | Reference | char * |
D | Byte-counted string (first byte contains length of string, maximum string length = 255 characters) | Reference | Unsigned char * |
E | IEEE 8-byte floating-point number | Reference | double * |
F | Null-terminated string (maximum string length = 255 characters) | Reference (modify in place) | char * |
G | Byte-counted string (first byte contains length of string, maximum string length = 255 characters) | Reference (modify in place) | unsigned char * |
H | Unsigned 2-byte integer | Value | unsigned short int |
I | Signed 2-byte integer | Value | short int |
J | Signed 4-byte integer | Value | long int |
K | Array | Reference | FP * |
L | Logical (FALSE = 0, TRUE = 1) |
Reference | short int * |
M | Signed 2-byte integer | Reference | short int * |
N | Signed 4-byte integer | Reference | long int * |
O | Array | Reference | Three arguments are passed: unsigned short int * unsigned short int * double [ ] |
P | Microsoft Excel OPER data structure | Reference | OPER * |
R | Microsoft Excel XLOPER data structure | Reference | XLOPER * |
Remarks
- The C-language declarations are based on the assumption that your compiler defaults to 8-byte doubles, 2-byte short integers, and 4-byte long integers.
- In the Microsoft Windows programming environment, all pointers are far
pointers. For example, you must declare the D data type code as
unsigned char far
* in Microsoft Windows. - All functions in DLLs and code resources are called using the Pascal calling
convention. Most C compilers allow you to use the Pascal calling convention by
adding the Pascal keyword to the function declaration, as shown in the following
example:
pascal void main (rows,columns,a)
- If a function uses a pass-by-reference data type for its return value, you can pass a null pointer as the return value. Microsoft Excel will interpret the null pointer as the #NUM! error value.
Additional Data Type Information
This section contains detailed information about the F, G, K, O, P, and R data types and other information about the type_text argument.F and G Data Types
With the F and G data types, a function can modify a string buffer that is allocated by Microsoft Excel. If the return value type code is F or G, then Microsoft Excel ignores the value returned by the function. Instead, Microsoft Excel searches the list of function arguments for the first corresponding data type (F or G) and then takes the current contents of the allocated string buffer as the return value. Microsoft Excel allocates 256 bytes for the argument, so the function may return a larger string than it received.
K Data Type
The K data type uses a pointer to a variable-size FP structure. You must define this structure in the DLL or code resource as follows:
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
The declaration double array[1]
allocates storage for only a
single-element array. The number of elements in the actual array equals the
number of rows multiplied by the number of columns.O Data Type
The O data type can be used only as an argument, not as a return value. It passes three items: a pointer to the number of rows in an array, a pointer to the number of columns in an array, and a pointer to a two-dimensional array of floating-point numbers.
Instead of returning a value, a function can modify an array passed by the O data type. To do this, you can use ">O" as the type_text argument. For more information, see "Modifying in Place — Functions Declared as Void" below.
The O data type was created for direct compatibility with Fortran DLLs, which pass arguments by reference.
P Data Type
The P data type is a pointer to an OPER structure. The OPER structure contains 8 bytes of data, followed by a 2-byte identifier that specifies the type of data. With the P data type, a DLL function or code resource can take and return any Microsoft Excel data type.
The OPER structure is defined as follows:
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;
The type field contains one of these values.Type | Description | Val field to use |
---|---|---|
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 |
R Data Type — Calling Microsoft Excel Functions from DLLs
The R data type is a pointer to an XLOPER structure, which is an enhanced version of the OPER structure. In Microsoft Excel version 4.0 and later, you can use the R data type to write DLLs and code resources that call Microsoft Excel functions. With the XLOPER structure, a DLL function can pass sheet references and implement flow control, in addition to passing data. A complete description of the R data type and the Microsoft Excel application programming interface (API) is beyond the scope of this topic. The Microsoft Office XP Developer's Guide contains detailed information about the R data type, the Microsoft Excel API, and many other technical aspects of Microsoft Excel.
Volatile Functions and Recalculation
Microsoft Excel usually calculates a DLL function (or a code resource) only when it is entered into a cell, when one of its precedents changes, or when the cell is calculated during a macro. On a worksheet, you can make a DLL function or code resource volatile, which means that it recalculates every time the worksheet recalculates. To make a function volatile, add an exclamation point (!) as the last character in the type_text argument.
For example, in Microsoft Excel for Windows, the following worksheet formula recalculates every time the worksheet recalculates:
CALL("Kernel32","GetTickCount","J!")
Modifying in Place — Functions Declared as VoidYou can use a single digit n for the return type code in type_text, where n is a number from 1 to 9. This tells Microsoft Excel to modify the variable in the location pointed to by the nth argument in type_text, instead of returning a value. This is also known as modifying in place. The nth argument must be a pass-by-reference data type (C, D, E, F, G, K, L, M, N, O, P, or R). The DLL function or code resource must also be declared with the void keyword in the C language (or the procedure keyword in the Pascal language).
For example, a DLL function that takes a null-terminated string and two pointers to integers as arguments can modify the string in place. Use "1FMM" as the type_text argument, and declare the function as void.
Versions prior to Microsoft Excel 4.0 used the > character to modify the first argument in place; there was no way to modify any argument other than the first. The > character is equivalent to n = 1 in Microsoft Excel version 4.0 and later.
call Function data type code for register. id data type codes for call Register Function register.id function xl
0 comments:
Post a Comment