PureBasic

CocoaMessage()

Синтаксис

Result = CocoaMessage(ReturnValueAddress , Object , Method$ [, ParameterValue [, Parameter$ , [, ParamaterValue , ...]]])

Описание


Для опытных пользователей. Доступно только для OS X, это позволяет легко отправить сообщение Objective-C в инфраструктуру OS X и получить доступ к любому API. Обычно Objective-C используют скобки, чтобы иметь четкий синтаксис для сообщений. Поскольку PureBasic не имеет встроенной поддержки Objective-C, он должен эмулировать его, поэтому синтаксис немного отличается. После изучения легко вызвать требуемый API. Чтобы получить больше примеров, прочитайте следующую тему на форумах.

Параметры

ReturnValueAddress Если вызов API возвращает структуру или тип, отличный от integer, это поле используется для установки возвращаемого результата. Необходимо указать адрес структуры или переменной. Если задано ноль, результат будет проигнорирован.
Object Объект, для которого будут вызваны методы Objective-C. Он может быть равен нулю, если метод является статическим (в основном при создании объекта).
Method$ Метод, вызываемый для объекта, за которым обычно следует точка с запятой (':'). Если методу требуется структура как параметр, после точки с запятой необходимо добавить '@'. Если метод ожидает строку как параметр, после точки с запятой может быть добавлен '$', поэтому строка будет автоматически преобразована во временную NSString. Это не требуется, но это может быть полезно и облегчить кодирование. Если метод не поддерживается объектом, отладчик отобразится сообщение во время выполнения.
ParameterValue (дополн.) Значение параметра, связанного с предыдущим методом.
Parameter$ (дополн.) Следующий параметр метода. PureBasic поддерживает до 7 параметров метода.

Возвращаемое значение

Возвращает целочисленное значение. Полезно для создания идентификатора объекта.

Комментарии

PureBasic имеет уже настроенный пул временной памяти, который очищается каждый раз, когда вызывается WindowEvent() или WaitWindowEvent(). Если вам нужно немедленно выпустить большие объекты, вам нужно будет создать пул локальной памяти для каждого из ваших вызовов.

Пример: со строкой

; Objective-C:
;  ColorList = [NSColorList colorListNamed:@"Crayons"];
;
ColorList = CocoaMessage(0, 0, "NSColorList colorListNamed:$", @"Crayons") ; Создает NSString для "Crayons" под капотом (в соответствии с режимом ascii/unicode в программе)

Пример: с составным типом

; Objective-C:
;  Transform = [NSAffineTransform transform];
;
Transform = CocoaMessage(0, 0, "NSAffineTransform transform") ; Get an identity transform

; Objective-C:
;  [TransForm scaleXBy:sx yBy:sy];
;
sx.CGFloat = 5.5
sy.CGFloat = 20
CocoaMessage(0, TransForm, "scaleXBy:@", @sx, "yBy:@", @sy) ; Масштабировать x на 5.5, y на 20. Поскольку sx не является целым числом, необходимо указать '@'.

; Objective-C:
;  NSAffineTransform TransformStruct = [TransForm transformStruct];
;
CocoaMessage(@TransformStruct.NSAffineTransform, TransForm, "transformStruct") ; Get the transform structure

Debug TransformStruct\m11 ; Отладчик выведет 5.5

Поддерживаемые OS

MacOS X

CPUName() - Оглавление System - ComputerName()->