Прочие методы
Параметры в квадратных скобках необязательны, но в общем случае нельзя опускать такой параметр, если следующий за ним вы указываете. Исключение — параметр Offset в методах NumGet, NumPut, StrGet, StrPut. Он может опускаться из середины списка аргументов (вместе с запятой).ArrPtr( Array ) — получение указателя на структуру SAFEARRAY массива.
- Array — переменная, содержащая массив. Не работает для массивов в JScript, т.к. это объекты.
LastError( [Flag] ) — если функция была зарегистрирована с флагом "l" (last error), т.е. был указан параметр "f=l", метод возвращает код ошибки, полученный вызовом API-функции GetLastError сразу после вызова зарегистрированной функции.
- Flag — если указан и равен 1, метод вернёт описание ошибки.
Перед вызовом зарегистрированной функции код обнуляется вызовом SetLastError(0). Смотрите в описании функции, устанавливает ли она этот код и имеет ли смысл его проверять.
- Bytes — размер в байтах.
- ZeroMem — если указан и равен 1, память будет заполнена нулями.
- MemPtr — указатель, полученный от метода MemAlloc.
- Address — адрес участка.
- Bytes — его размер в байтах.
- SrcAddr — исходный адрес.
- DestAddr — адрес назначения.
- Bytes — размер участка в байтах.
Участки чтения и записи могут накладываться друг на друга.
Возвращаемое значение содержит адрес сразу за последним записанным байтом.
- Address — адрес участка.
- Bytes — его размер в байтах.
- BytesPerGroup — количество байт в группе.
- GroupsPerLine — число групп на строке.
Группы будут разделены пробелами, строки — новой строкой (CRLF).
- HexStr — исходная строка.
- DestAddr — адрес назначения.
- Bytes — сколько байт писать. Если опущен или равен 0, пишется вся строка.
В хекс-строке каждый байт обозначен парой символов. Хекс-строка может содержать пробелы, табуляции, переводы строки и возвраты каретки, а также комментарии, описанные для метода RegisterCode.
Возвращаемое значение содержит адрес сразу за последним записанным байтом. Если DestAddr равен 0, будет возвращён размер буфера памяти, необходимый для записи хекс-строки. Это может быть полезно, если пишется вся строка и при этом она содержит пробелы и т.п., которые писаться не будут.
- Address — базовый адрес.
- Offset — смещение от адреса в байтах, положительное или отрицательное; по умолчанию 0.
- Type — тип числа: см. список здесь,
используются только входные типы; по умолчанию — l.
Считанное число помещается в возвращаемое методом значение.
- Var — либо литеральное числовое значение, либо переменная, содержащая значение, которое нужно записать.
- Address — базовый адрес.
- Offset — смещение от адреса в байтах, положительное или отрицательное; по умолчанию 0.
- Type — тип числа: см. список здесь,
используются только входные типы; по умолчанию — l.
Возвращаемое значение содержит адрес сразу за последним записанным байтом.
- Object — переменная, содержащая объект.
- ObjPtr — указатель на объект. Если объект поддерживает интерфейс IDispatch, возвращается переменная типа VT_DISPATCH; если нет — VT_UNKNOWN. Счётчик ссылок объекта увеличивается на 1.
- Var — строковая переменная.
- Type/Codepage — тип/кодировка. Возможные значения: w (по умолчанию), s, z (расшифровку см. здесь); явное указание кодовой страницы: например, "cp1251"; имя кодировки: например, "UTF-8", "UTF-16 BE". Если имя неизвестно, оно ищется в реестре в разделе HKEY_CLASSES_ROOT\MIME\Database\Charset, так что можно использовать имена подразделов оттуда. При значениях s, z либо кодировке строка предварительно конвертируется на месте.
Если результирующая строка длиннее исходной, она будет обрезана. Поскольку исходная строка в Юникоде, где каждый символ занимает два байта, места должно быть более чем достаточно в большинстве случаев. Возможно, какой-нибудь восточно-азиатский текст может быть длиннее в ANSI-кодировке или в UTF-8, чем он есть в UTF-16, но это только мои догадки.
Имеет ли смысл получать такой указатель на строку, зависит от того, копирует ли скриптовый движок строки при передаче в метод. Если да, то будет получен указатель на временную копию, пользы от которого немного, т.к. при попытке его использовать там может быть уже другая строка.
- Address — указатель в виде числа или строковая переменная.
- Offset — смещение от адреса в байтах, положительное или отрицательное, по умолчанию 0.
- Type/Codepage — тип/кодировка. Возможные значения см. в описании StrPtr. При значениях s, z или кодировке строка при чтении конвертируется в Юникод.
- Address — указатель в виде числа или строковая переменная.
- Offset — смещение от адреса в байтах, положительное или отрицательное, по умолчанию 0.
- Type/Codepage — тип/кодировка. Возможные значения см. в описании StrPtr. При значениях s, z либо кодировке строка при записи конвертируется.
Возвращается адрес после нулевого терминатора строки. Если Address указан как 0 (Offset также 0 или опущен), метод вернёт размер буфера в памяти, необходимый для записи строки в указанной кодировке, включая нулевой терминатор на конце строки.
- Count — число символов (двухбайтных).
- Char — символ, которым будет заполнена строка. По умолчанию строка заполняется пробелами — так же, как это делает функция Space в VBScript. Чтобы заполнить строку двоичными нулями, задайте Char как пустую строку ("").
NB: Метод Space был задуман для создания строк, используемых как буферы памяти — для чисел, структур, выходных строк. Но, как выяснилось на практике, такое использование строк в общем случае ненадёжно. Контроль над памятью, выделенной под строку, отдаётся скриптовому движку, и если он в процессе своей работы произведёт с ней какие-то манипуляции, помещённые в неё данные могут быть потеряны или испорчены. Поэтому я рекомендую для выделения памяти под буфер использовать метод MemAlloc.
- Variable — переменная. В языках, где переменные передаются в методы по ссылке, как в VBScript, будет получен указатель на VARIANT переменной. В тех, где они передаются по значению, как в JScript, вернётся указатель на временную копию, который бесполезен.
- Field — число согласно приведённой ниже таблице. Если Field опущен, это равносильно 0.
Пример для версии 2.5.7.10.
0 — полная версия как строка: "2.5.7.10"
1 — старший номер версии: 2
2 — младший номер версии: 5
3 — номер сборки: 7
4 — номер ревизии: 10 (0xA)
5 — старший + младший номер версии: 0x20005
6 — номер сборки + ревизии: 0x7000A
7 — полный номер версии: 0x200050007000A
Как вы можете видеть, каждое поле является 16-битным целым и занимает 2 байта.