Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 1 из 1
  1. #1
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    232
    Репутация:
    19 ±

    Класс загрузки DLL библиотек

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

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

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

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


    Исходный код класса:
    PHP код:
    class DllLoadClass
        
    {
            public static 
    string BasePath AppDomain.CurrentDomain.BaseDirectory;

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

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

            public static 
    string GetMethodFromClass(string libNamestring classNamestring Methodobject[] set_param_class nullobject[] set_param_to_func null)
            {
                
    string get_method_info null;

                try
                {
                    
    int pos = -1;
                    for (
    int id 0id asm_lib.Countid++)
                    {
                        if (
    asm_lib[id].IndexOf(libName) != -1)
                        {
                            
    pos id;
                            break;
                        }
                    }
                    
    object_load asm[pos].CreateInstance(libName "." classNamefalseBindingFlags.ExactBindingnullset_param_classnullnull);
                    
    MethodInfo m asm[pos].GetType(libName "." className).GetMethod(Method);

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

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

  2. Пользователь сказал cпасибо:
    oukibt (Вчера)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •