examples/Basics/ExtensionPattern/src_extensionclient/ExtensionClient.cpp

00001 /*
00002 Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
00003 
00004 Redistribution and use in source and binary forms, with or without
00005 modification, are permitted provided that the following conditions are met:
00006 
00007 * Redistributions of source code must retain the above copyright notice, this
00008   list of conditions and the following disclaimer.
00009 * Redistributions in binary form must reproduce the above copyright notice,
00010   this list of conditions and the following disclaimer in the documentation
00011   and/or other materials provided with the distribution.
00012 * Neither the name of Nokia Corporation nor the names of its contributors
00013   may be used to endorse or promote products derived from this software
00014   without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00017 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00018 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00020 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00021 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00022 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00023 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00024 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00025 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 
00027 Description:
00028 Implements a simple console application to use functionality from both OriginalDll
00029 and the ExtensionDll
00030 Should work without rebuild for both versions of OriginalDll & ExtensionDll  
00031 */
00032 
00033 
00034 
00035 #include <e32base.h>
00036 #include <e32cons.h>
00037 #include <NumberStore.h>
00038 
00039 _LIT(KHello,"Hello World!\r\n"); 
00040 _LIT(KTxtEPOC32EX,"EPOC32EX");
00041 _LIT(KTxtExampleCode,"Symbian platform Example Code");
00042 _LIT(KFormatFailed,"failed: leave code=%d");
00043 _LIT(KTxtOK,"ok");
00044 _LIT(KTxtPressAnyKey," [press any key]");
00045 
00046 LOCAL_D CConsoleBase* console;
00047 LOCAL_C void callExampleL(); 
00048 LOCAL_C void doExampleL(); 
00049 
00050 GLDEF_C TInt E32Main()
00051     {
00052         __UHEAP_MARK;
00053         CTrapCleanup* cleanup=CTrapCleanup::New(); 
00054         TRAPD(error,callExampleL()); 
00055         __ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
00056         delete cleanup; 
00057         __UHEAP_MARKEND;
00058         return 0; 
00059     }
00060 
00061 LOCAL_C void callExampleL()
00062     {
00063         console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
00064         CleanupStack::PushL(console);
00065         TRAPD(error,doExampleL()); 
00066         if (error)
00067                 console->Printf(KFormatFailed, error);
00068         else
00069                 console->Printf(KTxtOK);
00070         console->Printf(KTxtPressAnyKey);
00071         console->Getch(); 
00072         CleanupStack::PopAndDestroy();
00073     }
00074     
00075 LOCAL_C void doExampleL()
00076     {
00077         console->Printf(KHello);
00078         TInt num1=3;
00079         TInt num2=7;
00080 
00081         //Create & initialise the number store using original functionality
00082         CNumberStore* numberstore=new (ELeave) CNumberStore();
00083         numberstore->SetNumber1(num1);
00084         numberstore->SetNumber2(num2);
00085         console->Printf(_L("Created CNumberStore with values %d & %d\n"),num1,num2);
00086         num1=numberstore->Number1();
00087         num2=numberstore->Number2();
00088         console->Printf(_L("CNumberStore has values %d & %d\n"),num1,num2);
00089 
00090         TInt total=-1;
00091         TInt product=-1;
00092         
00093         //Use extension functionality
00094 
00095         //The following line will work as expected, using the implementation in the extension dll
00096         total=numberstore->AddNumbers();
00097 
00098         //The following line will fail to compile, as it attempts to call a private function
00099         //product=numberstore->DoMultiplyNumbers();
00100 
00101         //The following line will work as expected, using the implementation in the extension dll
00102         product=numberstore->MultiplyNumbers();
00103 
00104         console->Printf(_L("CNumberStore extension gives total %d\n"),total);
00105         console->Printf(_L("CNumberStore extension gives product with magic multiplyer %d\n"),product);
00106 
00107 
00108         delete numberstore;
00109         }

Generated by  doxygen 1.6.2