Tuesday, November 11, 2008

Assembly Explorer

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;


namespace Engine.Asm
{
/// 


/// Class ini digunakan untuk melakukan penjelajahan ke
/// dalam dll
/// 

public class AssemblyExplorer
{

private string path;
private List lstBaseName;
protected Assembly asm;
protected Type[] arrType;

public string getName()
{
return asm.ManifestModule.Name;
}
/// 
/// Buat instant baru dari class AssemblyExplorer
/// 

/// path lokasi dll yang akan diload
public AssemblyExplorer(string path)
{
try
{
this.path = path;
asm = Assembly.LoadFile(path);
////System.Windows.Forms.MessageBox.Show(asm.ManifestModule.Name);
arrType = asm.GetTypes();
lstBaseName = new List();
foreach (Type t in arrType)

if (!lstBaseName.Contains(t.BaseType.Name))
lstBaseName.Add(t.BaseType.Name);
}
}
catch (ReflectionTypeLoadException e)
{
System.Windows.Forms.MessageBox.Show(e.Message,e.GetType().Name);
}
catch (BadImageFormatException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
catch (NullReferenceException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
}

/// 
/// Ambil daftar kelas induk dari semua kelas
/// yang terdapat pada dll ini
/// 

/// daftar kelas induk
public List getListBaseName()
{
return lstBaseName;
}

/// 
/// Cek, apakah suatu dll memiliki kelas 
/// yang memiliki suatu kelas induk
/// 

/// nama kelas induk
/// true bila memiliki dan false bila tidak 
/// memiliki

public bool containtBaseClass(string baseClass)
{
if (lstBaseName == null)
return false;
foreach (string s in lstBaseName)
{
if (s.Trim().Equals(baseClass))
return true;
}
return false;
}

/// 
/// Ambil suatu class berdasar nama
/// 

/// nama kelas yang dicari
/// null bila tidak ditemukan, 
/// atau mengembalikan kelas 
/// bila ditemukan

public Type getClass(string ClassName)
{
if (arrType == null)
return null;
foreach (Type t in arrType)
{
if (t.Name.Equals(ClassName))
return t;
}
return null;
}

~AssemblyExplorer()
{
path = null;
asm = null;
lstBaseName = null;
arrType = null;
}


}
}

No comments: