How the synchronization works
How MLSync events are
implemented
The MLSync object in a PowerBuilder application and the dbmlsync
process communicate with each other by sending messages between two
windows, as shown in the following figure. The window that the MLSync
object creates uses an internal function, MlSyncControlWindowProc, to
process these messages.
The Synchronize function adds a “-wh window_handle” argument to the
end of the command line string that launches dbmlsync. This lets dbmlsync
send WM_COPYDATA messages to this window handle. MlSyncControlWindowProc
then triggers the appropriate event in the MLSync object.
Figure: How the synchronization process works

How progress window events are
triggered
The MobiLink Synchronization Wizard generates an instance of an
MLSync object that contains PowerScript code in each of its events. When
appropriate, this code triggers an event of the same name in the progress
window that is either generated by the wizard or customized for your
applications.
How the CancelSync function is
implemented
On the dbmlsync command string, there is a “-wc window_class”
argument that specifies the class name of a communications window that
dbmlsync registers and creates. If the PowerBuilder application needs to
cancel the synchronization process during any of its event processing
logic, it calls CancelSync. This function finds the window handle
associated with the -wc window class and sends a WM_CLOSE message.