Contents

AECoerceDescProcPtr

Defines a pointer to a function that coerces data stored in a descriptor. Your descriptor coercion callback function coerces the data from the passed descriptor to the specified type, returning the coerced data in a second descriptor.

Declaration

typealias AECoerceDescProcPtr = (UnsafePointer<AEDesc>?, DescType, SRefCon?, UnsafeMutablePointer<AEDesc>?) -> OSErr

Parameters

  • fromDesc:

    A pointer to the descriptor that contains the data to coerce. See Aedesc.

  • toType:

    The desired descriptor type for the resulting descriptor. For a list of AppleScript’s predefined descriptor types, see 1542788 Descriptor_type_constants. See Desctype.

  • handlerRefcon:

    A reference constant that is stored in the coercion dispatch table entry for the handler. The Apple Event Manager passes this value to the handler each time it calls it. The reference constant may have a value of 0.

  • toDesc:

    A pointer to a descriptor where your coercion routine must store the descriptor that contains the coerced data. See Aedesc.

Return Value

A result code. See Result Codes. Your handler should return noErr if it successfully handled the coercion, errAECoercionFailed if it can’t handle the coercion and it wants the Apple Event Manager to continue dispatching to other coercion handlers, or a nonzero result code otherwise.

Discussion

Your coercion handler should coerce the data to the desired descriptor type and return the resulting data in the descriptor specified by the result parameter.

To provide a pointer to your descriptor coercion callback function, you create a universal procedure pointer (UPP) of type AECoerceDescUPP, using the function NewAECoerceDescUPP(_:). You can do so with code like the following:

AECoerceDescUPP MyCoerceDescUPP;
MyCoerceDescUPP = NewAECoerceDescUPP (&MyCoerceDescCallback)

You can then pass the UPP MyCoerceDescUPP as a parameter to any function that installs or removes a coercion handler, such as AEInstallCoercionHandler(_:_:_:_:_:_:). If your application installs the same coercion handler to coerce more than one type of data, you can use the same UPP to install the handler multiple times.

If you wish to call your descriptor coercion callback function directly, you can use the InvokeAECoerceDescUPP(_:_:_:_:_:) function.

After you are finished with a descriptor coercion callback function, and have removed it with the AERemoveCoercionHandler(_:_:_:_:) function, you can dispose of the UPP with the DisposeAECoerceDescUPP(_:) function. However, don’t dispose of the UPP if any remaining coercion handler uses it or if you plan to install the coercion handler again.

See Also

Callbacks