Псевдотипы
Описание
Для опытных программистов. Псевдотипы предназначены для упрощения программирования, с использованием внешних библиотек нуждающихся в данных, типы которых не поддерживаются 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")