imageeditor/ImageEditorManager/src/Pluginloader.cpp
changeset 1 edfc90759b9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/ImageEditorManager/src/Pluginloader.cpp	Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+*
+* Contributors:
+* Ixonos Plc
+*
+* Description:  
+*
+*/
+
+
+
+#include <e32std.h>
+#include <eikenv.h>
+
+#include "PluginLoader.h"
+#include "ImageEditorError.h"
+
+#include "../../ImageEditor/inc/plugintypedef.h"
+
+//=============================================================================
+CPluginLoader * CPluginLoader::NewL (
+	const TDesC	&	aFileName,
+	const TUid *	aUID2,
+	const TUid *	aUID3
+	)
+{
+	CPluginLoader * self = CPluginLoader::NewLC (aFileName, aUID2, aUID3);
+	CleanupStack::Pop (); // self
+	return self;
+}
+
+//=============================================================================
+CPluginLoader * CPluginLoader::NewLC (
+	const TDesC	&	aFileName,
+	const TUid *	aUID2,
+	const TUid *	aUID3
+	)
+{
+	CPluginLoader * self = new (ELeave) CPluginLoader;
+	CleanupStack::PushL (self);
+	self->ConstructL (aFileName, aUID2, aUID3);
+	return self;
+}
+
+//=============================================================================
+CPluginLoader::~CPluginLoader ()
+{
+	delete iPlugin;
+	iLibrary.Close();
+}
+
+//=============================================================================
+CPluginLoader::CPluginLoader ()
+{
+
+}
+
+//=============================================================================
+void CPluginLoader::ConstructL (
+	const TDesC	&	aFileName,
+	const TUid *	aUID2,
+	const TUid *	aUID3
+	)
+{
+    LOGFMT(KImageEditorLogFile, "CPluginLoader: Loading plugin %S", &aFileName);
+    
+    //	Dynamically load DLL
+	TInt err = iLibrary.Load (aFileName);
+    if (err != KErrNone)
+        {
+        LOGFMT(KImageEditorLogFile,"CPluginLoader: Failed to load file: %S", &aFileName);
+        User::Leave (KSIEEInternal);
+        }
+
+	//	Check UID2
+	if (aUID2)
+	{
+		if ( iLibrary.Type()[1] != *aUID2 )
+		{
+            LOG(KImageEditorLogFile, "CPluginLoader: Invalid plugin UID");
+			User::Leave (KSIEEInternal);
+		}
+		
+	}
+
+    //	Check UID3
+	if (aUID3)
+	{
+        if ( iLibrary.Type()[2] != *aUID3 )
+		{
+            LOG(KImageEditorLogFile, "CPluginLoader: Invalid plugin UID");
+			User::Leave (KSIEEInternal);
+		}
+	}
+
+    //	Create a plugin by calling ordinal 1 factory method
+    TLibraryFunction entrypoint = iLibrary.Lookup (1);
+    iPlugin = (CPluginType *) entrypoint();
+
+}
+
+//=============================================================================
+CPluginType * CPluginLoader::GetPlugin () const
+{
+	return iPlugin;
+}
+
+//=============================================================================
+const RLibrary & CPluginLoader::GetPluginDll () const
+{
+	return iLibrary;
+}
+
+
+// End of File