PDA

View Full Version : [.NET Reflection] Type.InvokeMember()


0rph3n
08-03-2007, 16:36
'Giorno,
il metodo InvokeMember() mi lancia sta eccezione schifosa:

Dettagli eccezione: System.MissingMethodException: Impossibile trovare il metodo GAC.Classi.GestioneProcessi.MacchinaStati.funzioneTrasferimento1.

quando lo uso in questo modo:

// Esegue la funzione di trasferimento adeguata per verificare la percorribilità di un arco
private bool EseguiFunzioneTrasferimento(DataRow ArcoDaControllare, object simbolo)
{
// Istanzio l'array contenente i parametri per le funzioni di trasferimento
object[] parametri = new object[2];
parametri[0] = ArcoDaControllare;
parametri[1] = simbolo;
Type macchinaStati = Type.GetType("GAC.Classi.GestioneProcessi.MacchinaStati");
// Invoco la funzione di trasferimento adeguata
return (bool)macchinaStati.InvokeMember("funzioneTrasferimento" + ArcoDaControllare["nCodTrasferimento"], System.Reflection.BindingFlags.InvokeMethod, null, this, parametri);
}

...però il metodo funzioneTrasferimento1 esiste, eccolo qui:

// Prima funzione di trasferimento, sempre valida
private bool funzioneTrasferimento1(DataRow ArcoDaControllare, object simbolo)
{
return true;
}


Che sbaglio?
Denghiu!

0rph3n
08-03-2007, 17:35
ok, il motivo per il quale non riesce a trovare il metodo è che questo è dichiarato come private.
se lo dichiaro public tutto ok.
però cambiando l' invokeAttr (il secondo parametro che si passa a InvokeMember e che definisce come il metodo dev'essere cercato) da BindingFlags.InvokeMethod a BindingFlags.NonPublic mi spara un'altra eccezione:

Dettagli eccezione: System.ArgumentException: Specificare i flag di associazione che descrivono l'operazione invoke richiesta. Nome parametro: invokeAttr

Consigli?

0rph3n
08-03-2007, 17:43
ok risolto così:

return (bool)macchinaStati.InvokeMember("funzioneTrasferimento" + ArcoDaControllare["nCodTrasferimento"].ToString(), BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, this, parametri);

desso so contento :D

'iao