Q21805: < RESUME Linenumber > Is Not Allowed for Subprograms
Article: Q21805 Product(s): See article Version(s): 1.00 1.01 1.02 2.00 2.01 3.00 Operating System(s): MS-DOS Keyword(s): ENDUSER | docerr | mspl13_basic Last Modified: 16-NOV-1988 Question: How can I use ON ERROR GOTO to trap errors that occur inside of subprograms separately compiled from the main program in QuickBASIC Versions 1.00, 1.01, 1.02, 2.00, 2.01, 3.00, and 4.00 for MS-DOS? Response: The following information should be added to the "Microsoft QuickBASIC Compiler" documentation for Versions 1.x, 2.x, and 3.00: Error handling in separately compiled subprograms should be coded in the following fashion: SUB test STATIC ON ERROR GOTO errortrap ' body of subprogram END SUB errortrap: ' The error is handled here: PRINT "Error Number Trapped="ERR RESUME NEXT In QuickBASIC Versions 1.00, 1.01, 1.02, 2.00, 2.01, 3.00, and 4.00, the ON ERROR GOTO Label statement must be established for each module; otherwise, an error occurring in that module will not be trapped, and the program will stop. In QuickBASIC Versions 4.00 and earlier, error handling routines are local to each separately compiled module. A given error handling routine serves all subprograms that are compiled in the same module. To trap errors, the ON ERROR GOTO statement should appear in each subprogram that is compiled separately from the main module. In contrast to earlier versions, QuickBASIC Versions 4.00b and 4.50, and the Microsoft BASIC Compiler Versions 6.00 and 6.00b for MS-DOS and MS OS/2 offer global handling of ON ERROR (as explained in the UPDATE.DOC disk file). With global error-handling, an ON ERROR handler in the main program handles errors occurring in separate modules when those modules do not have their own ON ERROR handlers. All versions of QuickBASIC do not allow you to use < RESUME linenumber > or < RESUME linelabel > to handle errors that occur in subprograms. QuickBASIC only allows the use of RESUME or RESUME NEXT with subprograms. This fact needs to be added to Pages 128 and 129 of the "Microsoft QuickBASIC Compiler" documentation for Versions 2.x and 3.00. In Version 1.02, if a < RESUME linenumber > or < RESUME linelabel > statement is used in a separately compiled subprogram, an "SB" (subprogram) error displays, but an OBJ file still will be created. You should not LINK the OBJ file if it receives an "SB" error, or if it uses < RESUME linenumber > or < RESUME linelabel > with subprograms. If you did use the file, you could receive unpredictable errors at run time due to eventual stack overflow. QuickBASIC Versions 2.00 and later will properly give you a "Subprogram Error" message and will not produce an OBJ file if you use < RESUME linenumber > or < RESUME linelabel >. Note also that < RETURN linenumber > or < RETURN linelabel > is not allowed with "ON event GOSUB" trapping used with subprograms; only RETURN is allowed. This fact applies to ON TIMER GOSUB, ON KEY GOSUB, ON PLAY GOSUB, ON STRIG GOSUB, and ON PEN GOSUB. Event trapping should be structured similar to error trapping in the sample program above. For a related article, you may query on "subprogram module error resume QuickBASIC" in this database.
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.