PDA

Просмотр полной версии : [C#] Класс загрузки DLL библиотек



Fallen A.
25.09.2019, 14:38
Писался этот метод года полтора назад, поэтому, за 100% работоспособность отвечать не готов.
Однако, свою работу, как по мне, он выполняет.

В List asm_lib ручками вписываются все подгружаемые вами библиотеки.

Количество аргументов asm_lib и asm должны обязательно совпадать.

BasePath - есть полный путь к вашему исполняемому файлу.


Исходный код класса:


class DllLoadClass
{
public static string BasePath = AppDomain.CurrentDomain.BaseDirectory;

static List<string> asm_lib = new List<string>() { "system.dll" }; // 1
static Assembly[] asm = new Assembly[] { null }; // 1
static Object object_load;

public DllLoadClass()
{
try
{
for (int idx = 0; idx < asm_lib.Count; idx++)
asm[idx] = Assembly.LoadFrom(BasePath + "ТУТ ПУТЬ ДО ПАПКИ, ГДЕ ЛЕЖАТЬ БИБЛИОТЕКИ" + asm_lib[idx]);
}
catch (Exception ex)
{
MessageBox.Show("Ошибка загрузки DLL библиотеки! " + ex.Message);
}
}

public static string GetMethodFromClass(string libName, string className, string Method, object[] set_param_class = null, object[] set_param_to_func = null)
{
string get_method_info = null;

try
{
int pos = -1;
for (int id = 0; id < asm_lib.Count; id++)
{
if (asm_lib[id].IndexOf(libName) != -1)
{
pos = id;
break;
}
}
object_load = asm[pos].CreateInstance(libName + "." + className, false, BindingFlags.ExactBinding, null, set_param_class, null, null);
MethodInfo m = asm[pos].GetType(libName + "." + className).GetMethod(Method);

var outputInfo = m.Invoke(object_load, set_param_to_func).ToString();

if (string.IsNullOrEmpty(outputInfo))
get_method_info = "Error";
else
get_method_info = outputInfo;
}
catch (Exception ex)
{
MessageBox.Show("Load DLL library class: " + libName + "->" + className + "->" + Method + ". Error: " + ex.Message);
get_method_info = "Error";
}

return get_method_info;
}
}


Объявление класса (к примеру при старте программы):


new DllLoadClass();


Использование метода при обращении к dll:


var get_system_info = DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ", "ИМЯ КЛАССА", "ИМЯ МЕТОДА", null, null).ToString();

далее null - это аргументы. Можно использовать так, если ничего не передается в класс, а можно использовать вот так, если нужно отправить в класс данные:


var get_system_info = DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ", "ИМЯ КЛАССА", "ИМЯ МЕТОДА", null, new object[] { "АРГУМЕНТ 1", "АРГУМЕНТ 2", … , "АРГУМЕНТ N" }).ToString();


Информация возвращается из обработавшей ее библиотеки только в формате string.

Аргументы, передаваемые в класс могут быть любыми.