# 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