Важно: Внимание Неправилното редактиране на системния регистър може сериозно да повреди операционната система, принуждавайки ви да я преинсталирате. Microsoft не може да гарантира, че проблемите, създадени от неправилно редактиране на системния регистър, могат да бъдат решени. Преди да редактирате системния регистър, архивирайте всички ценни данни. За най-актуална информация относно използването и защитата на системния регистър на компютъра вижте помощта за Microsoft Windows.
В тази статия е описан синтаксисът и употребата на CALL, REGISTER и REGISTER.ID в Microsoft Excel.
Забележка: Функциите CALL и REGISTER не са налични в Excel за уеб.
В тази статия
Описание
По-долу са описани типове данни на аргументите и върнатите стойности, използвани от функциите CALL, REGISTER и REGISTER.ID. Аргументите и върнатите стойности се различават незначително, в зависимост от вашата работна среда, и тези разлики са отбелязани в таблица с типовете данни.
Типове данни
Във функциите CALL, REGISTER и REGISTER.ID аргументът type_text задава типа данни на върнатата стойност и типовете данни на всички аргументи за DLL функцията или кодовия ресурс. Първият знак на type_text задава типа данни на върнатата стойност. Останалите знаци показват типовете данни на всички аргументи. Например DLL функция, която връща число с плаваща запетая и приема като аргументи цяло число и число с плаваща запетая, ще изисква "BIB" за аргумента type_text.
Следващата таблица съдържа пълен списък на кодовете на типовете данни, които Microsoft Excel разпознава, описание на всеки тип данни, начина на предаване на аргумента или върнатата стойност и типична декларация за типа данни в езика за програмиране C.
Код |
Описание |
Предава се по |
Декларация в C |
A |
Логическа (FALSE = 0, TRUE = 1) |
Стойност |
short int |
B |
IEEE 8-байтово число с плаваща запетая |
Стойност (Windows)Адрес (Macintosh) |
double (Windows)double * (Macintosh) |
C |
Низ, завършващ с нулев символ (максимална дължина на низа = 255) |
Адрес |
char * |
D |
Низ с брой на байтовете (първият байт съдържа дължината на низа, максимална дължина на низа = 255 знака) |
Адрес |
Unsigned char * |
E |
IEEE 8-байтово число с плаваща запетая |
Адрес |
double * |
? |
Низ, завършващ с нулев символ (максимална дължина на низа = 255 знака) |
Адрес (модифициране на място) |
char * |
G |
Низ с брой на байтовете (първият байт съдържа дължината на низа, максимална дължина на низа = 255 знака) |
Адрес (модифициране на място) |
unsigned char * |
H |
2-байтово цяло без знак |
Стойност |
unsigned short int |
I |
2-байтово цяло със знак |
Стойност |
short int |
J |
4-байтово цяло със знак |
Стойност |
long int |
K |
Масив |
Адрес |
FP * |
L |
Логическа (FALSE = 0, TRUE = 1) |
Адрес |
short int * |
M |
2-байтово цяло със знак |
Адрес |
short int * |
N |
4-байтово цяло със знак |
Адрес |
long int * |
O |
Масив |
Адрес |
Предават се три аргумента: unsigned short int * unsigned short int * double [ ] |
P |
Microsoft Excel OPER структура от данни |
Адрес |
OPER * |
R |
Microsoft Excel XLOPER структура от данни |
Адрес |
XLOPER * |
Забележки
-
Декларациите в езика С са на базата на допускането, че настройките по подразбиране на вашия компилатор са 8-байтови числа с двойна точност, 2-байтови кратки цели числа и 4-байтови дълги цели числа.
-
В среда за програмиране на Microsoft Windows всички указатели са далечни указатели. Например в Microsoft Windows трябва да декларирате код с D тип данни като unsigned char far *.
-
Всички функции в DLL и кодови ресурси се извикват с помощта на конвенциите за извикване на Pascal. Повечето C компилатори позволяват да използвате тези конвенции чрез добавяне на ключова дума Pascal към декларацията на функцията, както е показано в следния пример: pascal void main (rows,columns,a)
-
Ако дадена функция използва тип данни, предавани по адрес, за да върне стойност, можете да предадете нулев показалец като върната стойност. Microsoft Excel ще интерпретира празния показалец като #NUM! стойността на грешка.
Допълнителна информация за типовете данни
Този раздел съдържа подробна информация за типовете данни F, G, K, O, P и R и друга информация за аргумента type_text.
Типове данни F и G
При типовете данни F и G една функция може да модифицира буфер за низове, който е заделен от Microsoft Excel. Ако кодът на типа на върнатата стойност е F или G, тогава Microsoft Excel игнорира стойността, върната от функцията. Вместо това Microsoft Excel търси списъка от аргументи на функцията за първия съответстващ тип данни (F или G) и след това взема текущото съдържание на заделения буфер за низове като върната стойност. Microsoft Excel заделя 256 байта за аргумента, така че функцията може да върне по-голям низ, отколкото е получила.
Тип данни K
Типът данни K използва указател към FP структура с променлив размер. Трябва да дефинирате тази структура в DLL или кодовия ресурс, както следва:
typedef struct _FP
{ unsigned short int rows; unsigned short int columns; double array[1]; /* Actually, array[rows][columns] */ } FP;
Декларацията double array[1] заделя памет само за масив с един елемент. Броят на елементите в истинския масив е равен на броя на редовете, умножен по броя на колоните.
Тип данни O
Типът данни O може да бъде използван само като аргумент, а не като върната стойност. Той предава три елемента: указател към броя на редовете в масив, указател към броя на колоните в масив и указател към двумерен масив от числа с плаваща запетая.
Вместо да върне стойност, една функция може да модифицира масив, подаден от данни тип O. За да направите това, можете да използвате ">O" като аргумента type_text. За повече информация вж. "Модифициране на място – функции, декларирани като Void" по-долу.
Типът данни O е създаден за пряка съвместимост с DLL на Fortran, който предава аргументите по адрес.
Тип данни P
Типът данни P е указател към OPER структура. OPER структурата съдържа 8 байта данни, следвани от 2-байтов идентификатор, който задава типа на данните. С типа данни P една DLL функция или кодов ресурс може да вземе и да върне всеки тип данни на Microsoft 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;
Полето type съдържа една от следните стойности.
Тип |
Описание |
Поле Val за използване |
1 |
Числов |
num |
2 |
Низ (първият байт съдържа дължината на низа) |
str |
4 |
Булев (логически) |
bool |
16 |
Грешка: стойностите за грешки са: 0#NULL! 7#DIV/0! 15#Value! 23#REF! 29#NAME? 36#NUM! 42#N/A |
err |
64 |
Масив |
array |
128 |
Липсващ аргумент |
|
256 |
Празна клетка |
Последните две стойности могат да се използват само като аргументи, а не за връщане на стойности. Стойността за липсващ аргумент (128) се предава, когато извикването пропуска аргумент. Стойността за празна клетка (256) се предава, когато извикването предава препратка към празна клетка.
Тип данни R – Извикване на функции на Microsoft Excel от DLL
Типът данни R е указател към XLOPER структура, която е разширена версия на OPER структурата. В Microsoft Excel версия 4.0 и по-късните версии можете да използвате типа данни R, за да пишете DLL и кодови ресурси, които извикват функции на Microsoft Excel. В структурата XLOPER една DLL функция, освен да предава данни, може да предава препратки към лист и да реализира управление на потока. Пълното описание на типа данни R и интерфейса за програмиране на приложения (API) на Microsoft Excel е извън обхвата на тази тема. Документът Microsoft Office XP Developer's Guide съдържа подробна информация за типа данни R, Microsoft Excel API и много други технически аспекти на Microsoft Excel.
Непостоянни функции и преизчисление
Microsoft Excel обикновено изчислява a DLL функция (или кодов ресурс) само когато е въведен в клетка, когато един от нейните предшественици се промени или когато клетката се изчислява по време на изпълнение на макрос. В работния лист можете да направите една DLL функция (или кодов ресурс) непостоянна, който означава, че тя ще се преизчислява всеки път, когато се преизчислява работният лист. За да направите една функция непостоянна, добавете удивителен знак (!) като последен знак в аргумента type_text.
Например в работен лист на Microsoft Excel за Windows следната формула ще се преизчислява всеки път, когато се преизчислява работният лист:
CALL("Kernel32";"GetTickCount";"J!")
Модифициране на място – функции, декларирани като Void
Можете да използва единична цифра n като код на върнатия тип в type_text, където n е число от 1 до 9. Това съобщава на Microsoft Excel да модифицира променливата на мястото, посочено от n-я аргумент в type_text, вместо да връща стойност. Това се нарича още модифициране на място. n-ят аргумент трябва да бъде тип данни, предаван по адрес (C, D, E, F, G, K, L, M, N, O, P или R). Освен това DLL функцията или кодовият ресурс трябва да се декларират с ключовата дума void в езика C (или с ключовата дума procedure в езика Pascal).
Например една DLL функция, която приема като аргументи един низ, завършващ с нулев символ, и два указателя към цели числа, може да модифицира низа на място. Използвайте "1FMM" като type_text аргумент и декларирайте функцията като void.
Версиите преди Microsoft Excel 4.0 използваха знака > за модифициране на място на първия аргумент; нямаше възможност за модифициране на други аргументи, освен първия. Знакът > е еквивалентен на n = 1 в Microsoft Excel версия 4.0 и следващите версии.