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")