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
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.