Feedback

C# - Ruft eine Methode in einer externen DLL anhand der Namen auf

Veröffentlicht von am 04.07.2007
(4 Bewertungen)
Die Methode nutzt Reflection um über die Namen von DLL, Klasse und Methode eine Methode aufzurufen und ihr eine ArrayListe an Parametern zu übergeben.

Parameter:
nameOfDLL -> Der Komplette Pfad und Namen der DLL (muss IL-Code (C++, C# , VB.NET) sein)
nameOfClass -> Der Komplette Name der Klasse incl. Namespace
nameOfMethod -> Der Name der Methode .-)
parameter -> Eine beliebige ArrayListe um eine unbestimmte Menge an Parametern zu übergeben.
Snippet in VB übersetzen
//Einbinden von:
using System.Reflection;
using System.Collections;

/// <summary>
/// Ruft eine Methode einer Klasse einer externen DLL auf und gibt falls ein
/// Fehler auftritt eine Fehlermeldung zurück..
/// </summary>
private String exsterneDLL(String nameOfDLL, String nameOfClass, String nameOfMethod, ArrayList parameter)
{
    String errorMessage = "";
    try
    {
        //erstmal die DLL laden
        Assembly assembly = Assembly.LoadFile(nameOfDLL);
        //Object mit dem übergebenen KlassenNamen erschaffen
        Object o = assembly.CreateInstance(nameOfClass);
        if (o != null)
        {
            //Parameter-Beschreibung
            Type[] typeArray = new Type[1];
                                typeArray.SetValue(typeof(ArrayList), 0); //Ein Paramter des Types von object am Index 0
            //Methode holen
            MethodInfo mi = o.GetType().GetMethod(nameOfMethod, typeArray);     //Holen der Methodeninfo für die gewümschte Methode
            if (mi != null)
            {
                //und ab damit ...
                errorMessage = (String)mi.Invoke(o, new Object[] { (ArrayList)parameter }); //Methode mit Parameter wird ausgeführt
            }
            else
            {
                errorMessage = "Methode <" + nameOfMethod + "> nicht in Klasse vorhanden."; //Fehler .. 
            }
        }
        else
        {
            errorMessage = "Klasse <" + nameOfClass + "> nicht in Plugin vorhanden."; //Fehler .. 
        }
    } 
    catch (System.IO.FileNotFoundException)
    {
        errorMessage = "Externes Plugin <" + nameOfDLL + "> konnte nicht geladen werden!";
    }
    return errorMessage;
}

Abgelegt unter Reflection, DLL, Aufruf, Name.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!