Utilisez la réflexion pour appeler des méthodes dans n'importe quelle bibliothèque .net
Auteur:Eve Cole
Date de mise à jour:2009-07-01 15:48:58
La fonction est la suivante, avec des commentaires, veuillez la vérifier vous-même :)
Note:
1. ReturnMessage est une classe que j'ai écrite moi-même. Veuillez consulter mes autres articles pour connaître sa fonction. J'ai également joint cette classe à la fin.
2. Grâce à NameSpaceAndClassName et MethodName, vous pouvez localiser avec précision une méthode. Par exemple, lors de l'appel de namespace1.Class1.Main dans abc.dll, l'appel est CallAssembly("abc.dll","namespace1.Class1","Main" ,nul )
public static ReturnMessage CallAssembly (chemin de chaîne, nom de chaîneEspaceAndClassName, nom de méthode de chaîne, paramètres d'objet [])
{
essayer
{
Assembly Ass=Assembly.LoadFrom(Path);//Charger le fichier (non limité aux dll, exe peut également être utilisé, à condition qu'il soit .net)
Tapez TP=Ass.GetType(NameSpaceAndClassName);//NameSpaceAndClassName est "namespace.classname", tel que "namespace1.Class1"
MethodInfo MI=TP.GetMethod(MethodName);//MethodName est le nom de la méthode à appeler, tel que "Main"
objet MeObj=System.Activator.CreateInstance(TP);
MI.Invoke(MeObj,Parameters);//Parameters est la liste de paramètres transmise lors de l'appel de la méthode cible
return new ReturnMessage(true,"appelé avec succès",1);
}
attraper (Exception e)
{
return new ReturnMessage(false,"Une exception s'est produite, le message est : "+e.Message,-1,e);
}
}
Message de retour attaché
classe publique ReturnMessage
{
message de retour public()
{
this.m_Succeed=false;
this.m_Message="";
this.m_Code=-1000 ;
this.m_Data=null ;
}
public ReturnMessage (bool IsSucceed)
{
this.m_Succeed=IsSucceed;
}
public ReturnMessage (bool IsSucceed, chaîne Message)
{
this.m_Succeed=IsSucceed;
this.m_Message=Message;
}
public ReturnMessage (bool IsSucceed, chaîne de message, code int)
{
this.m_Succeed=IsSucceed;
this.m_Message=Message;
this.m_Code=Code;
}
public ReturnMessage (bool IsSucceed, chaîne de message, code int, données d'objet)
{
this.m_Succeed=IsSucceed;
this.m_Message=Message;
this.m_Code=Code;
this.m_Data=Données ;
}
public ReturnMessage (bool IsSucceed, chaîne de message, code int, données d'objet, données d'objet [])
{
this.m_Succeed=IsSucceed;
this.m_Message=Message;
this.m_Code=Code;
this.m_Data=Données ;
this.m_Datas=Données ;
}
//
bool m_Succeed ;
chaîne m_Message ;
int m_Code;
objet m_Data ;
objet[] m_Datas;
public bool Réussir
{
obtenir{return m_Succeed;}
définir{m_Succeed=valeur;}
}
chaîne publique Message
{
obtenir{return m_Message;}
définir{m_Message=valeur;}
}
Code public entier
{
obtenir{return m_Code;}
définir{m_Code=valeur;}
}
Données d'objet public
{
obtenir{return m_Data;}
définir{m_Data=valeur;}
}
objet public[] Données
{
obtenir{return m_Datas;}
définir{m_Datas=valeur;}
}
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475574.html