Studio:Callback functions in Perl scripts

From STRIDE Wiki
Revision as of 17:07, 29 February 2008 by Timd (talk | contribs)
Jump to navigation Jump to search

To use callback functions in Perl scripts, use LetProperty(). This is an ActiveState Perl requirement for assigning a COM object (e.g., another interface) to a read/write property.

The following example demonstrates a user callback registration service with an owner callback function:

# The following example illustrates how to script a function pointer
# that has been qualified with the scl_ptr_flist pragma.
# Perspective: User of the regCallBack interface, Owner of the callBack interface
# Standard Perl setup
use strict;
use Carp;
use Win32::OLE;
Win32::OLE->Option(Warn => 3);

# Create a reference (shortcut) to the User instance of the regCallBack function
my $uRegCallBack = $main::ascript->Functions->Item("regCallBack")->User;

# Create a reference (shortcut) to the Owner instance of the regCallBack function
my $oCallBack = $main::ascript->Functions->Item("callBack")->Owner;

# Register for ownership of the callback function
$oCallBack->Register();

# Assign the callback function to the registration function's parameter cb
$uRegCallBack->ParameterList->LetProperty("cb", $oCallBack);

# Call the registration function passing in the callback function
$uRegCallBack->Call();

# Wait for the callback function to be called
my $event = $main::ascript->WaitForEvent();

# If the received event was the callback function
if ($event->Name == $oCallBack->Name) {
# Process the function call
# return the callback function to the user
$oCallBack->Return();
}