Писался этот метод года полтора назад, поэтому, за 100% работоспособность отвечать не готов.
Однако, свою работу, как по мне, он выполняет.
В List asm_lib ручками вписываются все подгружаемые вами библиотеки.
Количество аргументов asm_lib и asm должны обязательно совпадать.
BasePath - есть полный путь к вашему исполняемому файлу.
Исходный код класса:
PHP код:
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;
}
}
Объявление класса (к примеру при старте программы):
PHP код:
new DllLoadClass();
Использование метода при обращении к dll:
PHP код:
var get_system_info = DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ", "ИМЯ КЛАССА", "ИМЯ МЕТОДА", null, null).ToString();
далее null - это аргументы. Можно использовать так, если ничего не передается в класс, а можно использовать вот так, если нужно отправить в класс данные:
PHP код:
var get_system_info = DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ", "ИМЯ КЛАССА", "ИМЯ МЕТОДА", null, new object[] { "АРГУМЕНТ 1", "АРГУМЕНТ 2", … , "АРГУМЕНТ N" }).ToString();
Информация возвращается из обработавшей ее библиотеки только в формате string.
Аргументы, передаваемые в класс могут быть любыми.