int SetAbortProc( short ( FAR PASCAL EXPORT* lpfn )( HDC, short ) );
lpfn
A pointer to the abort function to install as the abort procedure. For more about this callback function, see below.
Installs the abort procedure for the print job.
If an application is to allow the print job to be canceled during spooling, it must set the abort function before the print job is started with the StartDoc member function or the STARTDOC escape, which are equivalent. Print Manager calls
the abort function during spooling to allow the application to cancel the print job or to process out-of-disk-space conditions. If no abort function is set, the print job will fail if there is not enough disk space for spooling.
Note that new features of Microsoft C/C++ let you use an ordinary function as the function passed to SetAbortProc. The address passed to EnumObjects is a FAR pointer to a function exported with __export and with the Pascal calling convention. In protect-mode applications, you do not have to create this function with the Windows MakeProcInstance function or free the function after use with FreeProcInstance.
You also do not have to export the function name in an EXPORTS statement in your application's module-definition file. You can instead use the __export function modifier, as in
short FAR PASCAL __export AFunction( HDC, short );
to cause the compiler to emit the proper export record for export by name without aliasing. This works for most needs. For some special cases, such as exporting a function by ordinal or aliasing the export, you still need to use an EXPORTS statement in a module-definition file.
For compiling Foundation programs, you'll normally use the /GA and /GEs compiler options. The /Gw compiler option is not used with the Foundation classes. (If you do use MakeProcInstance, you will need to explicitly cast the returned function pointer from FARPROC to the type needed in this API.) Callback registration interfaces are now type-safe (you must pass in a function pointer that points to the right kind of function for the specific callback).
Also note that all callback functions must trap Foundation exceptions before returning to Windows, since exceptions cannot be thrown across callback boundaries. For more information about exceptions, see Chapter 12 in the Class Libraries User's Guide.