Важно: Внимание! Неправильное изменение реестра может привести к серьезному повреждению системы и вызвать необходимость ее переустановки. Корпорация Майкрософт не гарантирует успешного устранения неполадок, вызванных ошибками при редактировании реестра. Перед изменением реестра сохраните архивные копии любых важных данных. Новейшие сведения об использовании и защите реестра вашего компьютера см. в справке Microsoft Windows.
В этой статье описаны синтаксис формулы и использование функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД в Microsoft Excel.
Примечание: Функции CALL и REGISTER недоступны в Excel в Интернете.
В этой статье
Описание
Ниже описаны аргументы и типы возвращаемых значений функций ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД. Аргументы и возвращаемые значения зависят от операционной среды; эти различия отражены в таблице типов данных.
Типы данных
В функциях ВЫЗВАТЬ, РЕГИСТРАТОР и РЕГИСТРАТОР.ИД аргумент "типы_данных" задает типы данных возвращаемых значений и всех аргументов для функции библиотеки DLL или кодового ресурса. Первый знак определяет тип данных возвращаемого значения. Остальные знаки указывают типы данных всех аргументов. Например, функция DLL, возвращающая число с плавающей запятой и принимающая целое число и число с плавающей запятой в качестве аргументов, требует в качестве аргумента "типы_данных" строку "BIB".
Приведенная ниже таблица содержит полный список кодов типов данных, распознаваемых Microsoft Excel, описание каждого типа данных и способ передачи значения, а также типичные объявления типов данных в языке программирования C.
Код |
Описание |
Передается |
Объявление в языке C |
А |
Логическое значение (ЛОЖЬ = 0), ИСТИНА = 1) |
Значение |
short int |
B |
8-байтовое число с плавающей запятой |
Значение (Windows)Ссылка (Макинтош) |
double (Windows)double * (Макинтош) |
C |
Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255) |
Ссылка |
char * |
D |
Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) |
Ссылка |
Unsigned char * |
E |
8-байтовое число с плавающей запятой |
Ссылка |
double * |
F |
Строка, заканчивающаяся кодом 0 (максимальная длина строки = 255 знаков) |
Ссылка (изменяется на месте) |
char * |
G |
Строка со счетчиком байтов (первый байт содержит длину строки, максимальная длина строки = 255 знаков) |
Ссылка (изменяется на месте) |
unsigned char * |
H |
2-байтовое беззнаковое целое |
Значение |
unsigned short int |
I |
2-байтовое целое число со знаком |
Значение |
short int |
J |
4-байтовое целое число со знаком |
Значение |
long int |
K |
Массив |
Ссылка |
FP * |
L |
Логическое значение (ЛОЖЬ = 0, ИСТИНА = 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 * |
Замечания
-
Объявления для языка C основаны на предположении, что компилятор использует по умолчанию 8 байт для хранения чисел с двойной точностью, 2 байта — для коротких целых и 4 — для длинных целых.
-
В среде программирования Microsoft Windows все указатели являются дальними. Например, в Microsoft Windows код типа данных D должен быть объявлен как unsigned char far *.
-
При вызове всех функций в библиотеках DLL и кодовых ресурсах используются соглашения о вызове Pascal. Большинство компиляторов C позволяют использовать соглашения о вызове Pascal, добавив ключевое слово pascal в объявление функции, как показано в примере: pascal void main (rows,columns,a)
-
Если функция использует тип данных передачи по ссылке для возвращаемого значения, в качестве возвращаемого значения можно передать пустой указатель. Microsoft Excel интерпретирует пустой указатель как #NUM! (значение ошибки).
Дополнительные сведения о типах данных
Этот раздел содержит подробную информацию о типах данных F, G, K, O, P и R, а также другие сведения об аргументе "типы_данных".
Типы данных F и G
При работе с типами данных F и G функция может модифицировать буфер строки, выделенный приложением Microsoft Excel. Если код типа возвращаемого значения — F или G, значение, возвращаемое функцией, игнорируется. Вместо этого в списке аргументов функции выполняется поиск первого подходящего типа данных (F или G), и текущее содержимое выделенного буфера строки рассматривается как возвращаемое значение. В приложении Microsoft 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 может использоваться только как аргумент, но не как возвращаемое значение. Этот тип передает три элемента: указатель на число строк в массиве, указатель на число столбцов в массиве и указатель на двухмерный массив чисел с плавающей запятой.
Вместо возврата значения функция может изменить массив, переданный типом данных O. Для этого в качестве аргумента type_text можно использовать ">O". Дополнительные сведения см. в разделе Изменение на месте — функции, объявленные как void.
Тип данных O был создан для обеспечения прямой совместимости с динамическими библиотеками 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;
Поле тип содержит одно из следующих значений:
Тип |
Описание |
Используемое поле в val |
1 |
Число |
num |
2 |
Строка (первый байт содержит длину строки) |
str |
4 |
Логическое значение |
bool |
16 |
Ошибка. Значения ошибок: 0#ПУСТО! 7#ДЕЛ/0! 15#ЗНАЧ! 23#ССЫЛ! 29#ИМЯ? 36#ЧИСЛО! 42#Н/Д |
err |
64 |
Массив |
массив |
128 |
Пропущенный аргумент |
|
256 |
Пустая ячейка |
Последние два значения могут использоваться только как аргументы, но не как возвращаемые значения. Значение 128 (пропущенный аргумент) передается в том случае, если при вызове опущен какой-либо аргумент. Значение 256 (пустая ячейка) передается в случае ссылки на пустую ячейку при вызове функции.
Тип данных R — вызов функций Microsoft Excel из библиотек DLL
Тип данных R — это указатель на структуру XLOPER, которая является расширенной версией структуры OPER. В Microsoft Excel 4.0 и более поздних версиях приложения тип данных R можно использовать для создания библиотек DLL и ресурсов кода, которые вызывают функции Microsoft Excel. Используя структуру XLOPER, функции DLL могут передавать ссылки на лист и осуществлять не только передачу данных, но и управление потоком. Полное описание типа данных R и программного интерфейса приложения Microsoft Excel выходит за рамки данного раздела. Подробные сведения о типе данных R, программном интерфейсе Microsoft Excel и многих других технических аспектах этого приложения можно найти в пакете Руководство разработчика Microsoft Office XP.
Переменные функции и повторные вычисления
Microsoft Excel обычно вычисляет функцию из динамической библиотеки (или программный ресурс) тогда, когда она вводится в ячейку, когда изменяется одна из влияющих ячеек или когда ячейка вычисляется в процессе выполнения макроса. Можно сделать функцию DLL или программный ресурс на листе временными, то есть они будут вычисляться всякий раз, когда пересчитывается лист. Для этого в конец аргумента "типы_данных" надо добавить восклицательный знак (!).
Например, в Microsoft Excel для Windows приведенная ниже формула будет пересчитываться всякий раз, когда будет пересчитываться лист:
ВЫЗВАТЬ("Kernel32","GetTickCount","J!")
Изменение на месте — функции, объявленные как недействительные
В качестве типа возвращаемого значения в аргументе "типы_данных" можно использовать одну цифру n (от 1 до 9). Это указывает приложению Microsoft Excel на необходимость изменить переменную, указанную аргументом номер n в аргументе "типы_данных", а не возвращать значение. Этот прием иногда называют изменением на месте. Типом n-го аргумента должен быть тип, передаваемый по ссылке (C, D, E, F, G, K, L, M, N, O, P или R). Функция DLL или программный ресурс при работе с языком C должны быть объявлены с ключевым словом void (или, при программировании на языке Pascal, с ключевым словом procedure).
Например, функция DLL, которая получает строку, заканчивающуюся знаком 0, и два указателя на целые числа в качестве аргументов, может отредактировать строку на месте. Используйте "1FMM" в качестве аргумента "типы_данных" и объявите функцию как void.
Версии, предшествующие Microsoft Excel 4.0, использовали символ > для изменения первого аргумента на месте; Невозможно изменить какой-либо аргумент, кроме первого. Символ > эквивалентен n = 1 в Microsoft Excel версии 4.0 и более поздних.