PureBasic
Псевдотипы
Описание
Для опытных программистов. Псевдотипы предназначены для упрощения программирования, с использованием внешних библиотек нуждающихся в данных, типы которых не поддерживаются PureBasic. В этом случае возможно использование встроенного pseudotype, которая и выполняет необходимые преобразования на лету (во время использования), без каких-либо дополнительных команд. Поскольку они нереальные типы, их обозначение отличается наличием префикса 'p-' ('псевдо') добавляемого к типу. Доступные псевдотипы: p-ascii: ведет себя как тип string, последовательность знаков будет всегда конвертироваться в
ascii во время вызова функции, даже если программа компилируется как unicode
Это может быть полезным при вызове функции библиотеки, которая не поддерживает
unicode, в программе откомпилированной в unicode.
p-utf8: ведет себя как тип string, последовательность знаков будет всегда конвертироваться в
utf8 во время вызова функции, даже если программа компилируется как unicode
Это может быть полезным при вызове функции библиотеки, которая поддерживает только UTF8.
p-bstr: ведет себя как тип string, но всегда будет преобразовывать строку в bstr, прежде чем вызвать
функцию. Это может быть полезным при вызове функции библиотеки,
которым нужны параметры bstr, таких как COM-компоненты.
p-unicode: ведет себя как тип string, но всегда будет преобразовывать строку в unicode прежде,
чем вызвать функцию, даже когда программа скомпилирована в режиме ASCII.
Это может быть полезным, например в программе ASCII при вызове функции библиотеки,
которая поддерживает только unicode.
p-variant: Действует как числовой тип, корректирует вызов функции для правильного использования
параметра типа 'VARIANT'. Это может быть полезным при вызове функции библиотеки,
которые нуждаются в параметрах типа 'VARIANT', таких как COM-компоненты.
Пример
Import "User32.lib" ; Мы используем псевдотип 'p-unicode' для строковых параметров, так как ; MessageBoxW() является функцией поддерживающей только unicode. ; Компилятор автоматически преобразует строки в unicode при необходимости. ; MessageBoxW(Window.i, Body.p-unicode, Title.p-unicode, Flags.i = 0) EndImport ; Это будет работать правильно в ASCII и unicode режиме, даже если API будет поддерживать только ; unicode, поскольку компилятор сам будет заботиться о преобразовании. ; MessageBoxW(0, "Hello", "World")