diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_trap_d_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_trap_d_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ - -
-00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). -00002 // All rights reserved. -00003 // This component and the accompanying materials are made available -00004 // under the terms of "Eclipse Public License v1.0" -00005 // which accompanies this distribution, and is available -00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". -00007 // -00008 // Initial Contributors: -00009 // Nokia Corporation - initial contribution. -00010 // -00011 // Contributors: -00012 // -00013 // Description: -00014 // Example shows creation and use of of an object protected by a TRAPD -00015 // NOTE: the structure of this example is different to standard E32 examples -00016 // -00017 -00018 -00019 #include <e32cons.h> -00020 -00021 // All messages written to this -00022 LOCAL_D CConsoleBase* console; -00023 -00024 // Flag which determines whether the doSomething() member function -00025 // of the CExample class should leave when called. -00026 LOCAL_D TBool leaveFlag = ETrue; -00027 -00028 // Parameter for __UHEAP_SETFAIL -00029 // Allocation guaranteed to fail at this number of allocation attempts; -00030 // i.e. if set to n, allocation fails on the nth attempt. -00031 // NB only used in debug mode -00032 #ifdef _DEBUG -00033 LOCAL_D TInt allocFailNumber = 1; -00034 #endif -00035 -00036 // Function prototypes -00037 LOCAL_C void doExampleL(); -00038 LOCAL_C void callExampleL(); -00039 -00040 -00041 -00043 // -00044 // -----> CExample (definition) -00045 // -00046 // The class is used by the example code -00047 // -00049 class CExample : public CBase -00050 { -00051 public : -00052 void DoSomethingL(); -00053 public : -00054 TInt iInt; -00055 }; -00056 -00057 -00059 // -00060 // -----> CExample (implementation) -00061 // -00063 void CExample::DoSomethingL() -00064 { -00065 // Leave if the global flag is set -00066 if (leaveFlag) -00067 { -00068 _LIT(KMsgLeaving,"DoSomethingL leaving.\n"); -00069 console->Printf(KMsgLeaving); -00070 User::Leave(KErrGeneral); -00071 } -00072 _LIT(KFormat1,"Value of iInt is %d.\n"); -00073 console->Printf(KFormat1,iInt); -00074 } -00075 -00077 // -00078 // Main function called by E32 -00079 // -00081 GLDEF_C TInt E32Main() -00082 { -00083 // Get cleanup stack -00084 CTrapCleanup* cleanup=CTrapCleanup::New(); -00085 -00086 // Some more initialization, then do the example -00087 TRAPD(error,callExampleL()); -00088 -00089 // callExampleL() should never leave. -00090 _LIT(KMsgPanicEpoc32ex,"EPOC32EX"); -00091 __ASSERT_ALWAYS(!error,User::Panic(KMsgPanicEpoc32ex,error)); -00092 -00093 // destroy the cleanup stack -00094 delete cleanup; -00095 -00096 // return -00097 return 0; -00098 } -00099 -00100 -00102 // -00103 // -00104 // -00106 LOCAL_C void callExampleL() -00107 { -00108 // Initialize and call the example code under cleanup stack. -00109 _LIT(KMsgExampleCode,"Symbian platform Example Code"); -00110 console = Console::NewL(KMsgExampleCode,TSize(KConsFullScreen,KConsFullScreen)); -00111 // Put console onto the cleanup stack. -00112 CleanupStack::PushL(console); -00113 -00114 // Perform the example function under the protection of a -00115 // TRAP harness. -00116 TRAPD(error,doExampleL()); -00117 _LIT(KMsgOK,"ok"); -00118 _LIT(KFormat2,"failed: leave code = %d"); -00119 if (error) -00120 console->Printf(KFormat2,error); -00121 else -00122 console->Printf(KMsgOK); -00123 -00124 // Continue -00125 _LIT(KMsgPressAnyKey," [press any key]"); -00126 console->Printf(KMsgPressAnyKey); -00127 console->Getch(); -00128 -00129 // Remove the console object from the cleanupstack -00130 // and destroy it. -00131 CleanupStack::PopAndDestroy(); -00132 } -00133 -00134 -00136 // -00137 // Do the example -00138 // -00139 // Create and use an instance of CExample, protected by TRAPD -00140 // -00142 void doExampleL() -00143 { -00144 // Memory alloc fails on the 'allocFailNumber' attempt. -00145 __UHEAP_SETFAIL(RHeap::EDeterministic,allocFailNumber); -00146 // Allocate - leave if allocation fails. -00147 CExample* myExample = new (ELeave) CExample; -00148 // Do something that cannot leave (no protection needed) -00149 myExample->iInt = 5; -00150 // Do something that can leave and trap the failure -00151 TRAPD(error,myExample->DoSomethingL()); -00152 // Delete the CExample object -00153 delete myExample; -00154 // Now check whether DoSomethingL() left -00155 User::LeaveIfError(error); -00156 } -00157 -00158 -00159 -00160 -00161 -00162 -00163 -00164 -