Use reflexão para chamar métodos em qualquer biblioteca .net
Autor:Eve Cole
Data da Última Atualização:2009-07-01 15:48:58
A função é a seguinte, com comentários, verifique você mesmo :)
Observação:
1. ReturnMessage é uma classe que eu mesmo escrevi. Verifique meus outros artigos para saber sua função. Também anexei essa classe no final.
2. Por meio de NameSpaceAndClassName e MethodName, você pode localizar um método com precisão. Por exemplo, ao chamar namespace1.Class1.Main em abc.dll, a chamada é CallAssembly("abc.dll","namespace1.Class1","Main" ,nulo )
public static ReturnMessage CallAssembly (string Path,string NameSpaceAndClassName,string MethodName,object[] Parâmetros)
{
tentar
{
Assembly Ass=Assembly.LoadFrom(Path);//Carrega o arquivo (não limitado a dll, exe também pode ser usado, desde que seja .net)
Digite TP=Ass.GetType(NameSpaceAndClassName);//NameSpaceAndClassName é "namespace.classname", como "namespace1.Class1"
MethodInfo MI=TP.GetMethod(MethodName);//MethodName é o nome do método a ser chamado, como "Main"
objeto MeObj=System.Activator.CreateInstance(TP);
MI.Invoke(MeObj,Parameters);//Parameters é a lista de parâmetros passada ao chamar o método de destino
return new ReturnMessage(true,"chamado com sucesso",1);
}
pegar(Exceção e)
{
return new ReturnMessage(false,"Ocorreu uma exceção, a mensagem é: "+e.Message,-1,e);
}
}
Mensagem de retorno anexada
classe pública ReturnMessage
{
mensagem de retorno pública()
{
this.m_Succeed=false;
this.m_Message="";
este.m_Code=-1000;
this.m_Data=nulo;
}
mensagem de retorno pública (bool IsSucceed)
{
this.m_Succeed=IsSucceed;
}
public ReturnMessage(bool IsSucceed,string Mensagem)
{
this.m_Succeed=IsSucceed;
this.m_Message=Mensagem;
}
public ReturnMessage(bool IsSucceed,string Mensagem,código int)
{
this.m_Succeed=IsSucceed;
this.m_Message=Mensagem;
this.m_Code=Código;
}
public ReturnMessage (bool IsSucceed, string Mensagem, código int, dados do objeto)
{
this.m_Succeed=IsSucceed;
this.m_Message=Mensagem;
this.m_Code=Código;
this.m_Data=Dados;
}
public ReturnMessage (bool IsSucceed, string Mensagem, código int, dados do objeto, dados do objeto [])
{
this.m_Succeed=IsSucceed;
this.m_Message=Mensagem;
this.m_Code=Código;
this.m_Data=Dados;
this.m_Datas=Dados;
}
//
bool m_Sucesso;
string m_Mensagem;
int m_Code;
objeto m_Dados;
objeto[]m_Dados;
bool público Sucesso
{
obter{retornar m_Succeed;}
definir{m_Sucesso=valor;}
}
mensagem de string pública
{
obter{retornar m_Message;}
definir{m_Mensagem=valor;}
}
Código interno público
{
obter{retornar m_Code;}
definir{m_Code=valor;}
}
Dados de objeto público
{
obter{retornar m_Data;}
definir{m_Dados=valor;}
}
objeto público[] Dados
{
obter{retornar m_Datas;}
definir{m_Datas=valor;}
}
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475574.html