Reflection --> REF Parameter einer Methode

Hallo liebe C# Profis !

Es geht um folgendes Problem : Via Reflection und dem Actiovator lade ich eine Class ! Eine Methode dieser Class hat einen „REF“ Parameter (da sollen Daten zurückkommen)! Allerdings bekomme ich immer eine NullReference Exception !

Folgendes CodeBeispiel einer Console App verdeutlicht das Problem vielleicht :

using System;
using System.Reflection;

namespace MyNs
{
 /// 
 /// Summary description for Class1.
 /// 
 class MyMain
 {
 /// 
 /// The main entry point for the application.
 /// 
 [STAThread]
 static void Main(string[] args)
 {

 /\* Beispiel : wie kommen mehrere Klassen aus einem anderen Assembly

 Assembly fooAssembly = Assembly.LoadFrom("Foo.dll");
 Type[] fooTypes = fooAssembly.GetTypes();
 \*/

 //Type bestimmen, übergeben von Namespace und Class-Name
 Type typCls = Type.GetType("MyNs.MyDyn");
 // Class instanzieren 
 object objCls = Activator.CreateInstance(typCls);

 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 // Erste Methode aufrufen
 // Parameter Typen in ParameterTypen Array abspeichern
 Type [] paTypesFirst = {typeof(object), typeof(string)};
 // Referenz auf eine Methode holen und ParameterTypen mitliefern
 // wenn keine Parameter dann "null" übergeben
 MethodInfo miFirst = typCls.GetMethod("FirstMeth", paTypesFirst);

 // Irgendein Array
 string [] strArray = {"Eins", "Zwei", "Drei", "Vier"};
 // Irgendein String
 string strXXX = "Nur ein String";

 // Alle Parameter in ein Array, welches alle Parameter enthält, legen
 object [] psFirst = {strArray, strXXX};
 // Mit Invoke wird die Methode aufgerufen und die Parameter übergeben 
 // der Return muß entsprechend des Typs gecastet werden
 int intRet = (int) miFirst.Invoke(objCls, psFirst);

 Console.WriteLine("Return des ersten Aufrufs : " + intRet.ToString());


 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 // Zweite Methode aufrufen
 Type [] paTypesSec = {typeof(string), typeof(int)};
 MethodInfo miSec = typCls.GetMethod("SecMeth", paTypesSec);

 string s = "DerString";
 int i = 12;

 object [] pars = {s,i};

 miSec.Invoke(objCls, pars);

 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 // Dritte Methode aufrufen
 Type [] paTypesThrd = {typeof(string), typeof(object)};
 MethodInfo miThird = typCls.GetMethod("ThirdMeth", paTypesThrd);

 string pWert1 = "MeinStringParam";
 object pWert2 = null;

 object[] pWerte = {pWert1,pWert2};
 // ??????? und hier kommt die Exception ???????????????
 int ret = (int) miThird.Invoke(objCls, pWerte);
 //ParameterInfo [] piParas = miThird.GetParameters();
 }
 }

 class MyDyn
 {
 public MyDyn()
 {
 Console.WriteLine("Constructor called");
 }

 public int FirstMeth(object pObj, string pStr)
 {
 Type t = pObj.GetType();
 if( t.IsArray)
 {
 string sOut = "";
 object [] os = (object []) pObj;
 foreach(object o in os) 
 sOut += o.ToString() + '\t';

 Console.WriteLine("Array : " + sOut);
 }
 return(33);
 }

 public void SecMeth(string P1, int P2)
 {
 Console.WriteLine("P1 {0} / P2 {1} \n",P1, P2);
 }

 public int ThirdMeth(string Par1, ref object Par2)
 {
 string [] strArray = new string [] {"Erster", "Zweiter", "Dritter", "Vierter", "Fünfter"};
 Console.WriteLine("Par1 : " + Par1);
 Par2 = strArray;
 return(1); 
 }
 }
}

Für eine Idee, die Lösung oder wo man nachsehen könnte wäre ich sehr dankbar :smile:

Ciao
Mario

[MOD]: _Heute bin ich in Spenderlaune und habe den PRE-Tag eingefügt (siehe Brettbeschreibung).
Aber ich würde Euch bitten, Eure Hausaufgaben selbst zu machen. Schließlich wollt Ihr alle, daß die Artikel gelesen und verstanden werden.
Gruß

J._