examples/Base/IPC/ClientServer/Gettingstarted/transient/test/plugin.h

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 // Transient server example - plugin class
00015 //
00016 
00017 #ifndef __PLUGIN_H__
00018 #define __PLUGIN_H__
00019 
00020 #include <e32std.h>
00021 
00022 template <class T> class CPlugIn
00023         {
00024         typedef T* (*TFactoryL)();
00025 public:
00026         static T* NewL(const TDesC& aDllName);
00027         void Close();
00028 protected:
00029         inline virtual ~CPlugIn() {}
00030 private:
00031         RLibrary iLibrary;
00032         };
00033 
00034 template <class T> T* CPlugIn<T>::NewL(const TDesC& aDllName)
00035         {
00036         RLibrary l;
00037         User::LeaveIfError(l.Load(aDllName));
00038         CleanupClosePushL(l);
00039         T* plugin=TFactoryL(l.Lookup(1))();
00040         static_cast<CPlugIn<T>*>(plugin)->iLibrary=l;
00041         CleanupStack::Pop();
00042         return plugin;
00043         }
00044 
00045 template <class T> void CPlugIn<T>::Close()
00046         {
00047         RLibrary l(iLibrary);
00048         delete this;
00049         l.Close();
00050         }
00051 
00052 #endif
00053 

Generated by  doxygen 1.6.2