Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
GENDALF_ISTARI
13 / 30 / 19
Регистрация: 20.08.2013
Сообщений: 717
1
.NET 3.x

Как использовать методы библиотеки DLL, и игнорировать их, когда DLL нету?

05.01.2015, 18:13. Просмотров 1025. Ответов 4
Метки нет (Все метки)

Как использовать методы библиотеки DLL , и игнорировать их когда DLL нету
Что нужно , мне нужно так чтоб проверялось наличие библиотеки
если она есть - то обьвленные методы функции можно было использовать
как только библиотеки нету - то все обьявленные функции не использовать
при этом программа написала что библиотеки нету и
Код приложения Console_Test_Libraty.exe

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
 
using swich_lib;
 
namespace Console_Test_Libraty
{
    class Program
    {
        static void Main()
        {
            Console.BackgroundColor=ConsoleColor.DarkCyan;
            Console.Clear();
            Console.ForegroundColor=ConsoleColor.White;
            Console.Title = "Тест библиотек";
 
            Assambly_dll_exist("swich_lib.dll");
        }
 
 
        private const string myclass_assambly = "swich_lib.test_class";
        static void Assambly_dll_exist(string file_dll)
        {
            string fi = Environment.CurrentDirectory + "\\" + file_dll;
            Assembly dll=null;
            try
            {
                dll = Assembly.LoadFile(fi);
            }
            catch (Exception ex)
            {
                
                //Console.WriteLine(ex.Message);
                Console.WriteLine("Библиотека отсутствует : "+dll.FullName);
                Console.ReadKey(true);
            }
            Type myclass = null;
            try
            {
                myclass = dll.GetType(myclass_assambly);
                if (myclass==null)
                    throw new Exception("Не удаеться загрузить: " + myclass_assambly);
            }
            catch (Exception ex)
            {
 
                Console.WriteLine(ex.Message);
                Console.ReadKey(true); ;
            }
 
            
 
            /*MethodInfo[] m = myclass.GetMethods();
            if (m.Length<5)
                return;*/
            object instance = Activator.CreateInstance(myclass);
            object[] parameters = {true, "Ура получилось", 2};
 
            MethodInfo mi = null;
            //MethodAccessException activ_metod=new MethodAccessException();
            try
            {
                mi = myclass.GetMethod("metod_testy");
                
            }
            catch (Exception ex)
            {
 
                Console.WriteLine(ex.Message);
                Console.ReadKey(true); ;
            }
 
            try
            {
                mi.Invoke(instance, parameters); // это я не понял 
                                                              // мне нужно просто использовать метод metod_testy("ляляля")
                                                             // Как это сделать ?
            }
            catch (Exception ex)
            {
 
                Console.WriteLine(ex.Message);
                Console.ReadKey(true); ;
            }
  
        }
    }
}

Это код библиотеки swich_lib.dll
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace swich_lib
{
    public class test_class
    {
        public void metod_testy(string str)
        {
            Console.WriteLine(" Если этот текст вывело то значит");
            Console.WriteLine(" библиотека проверена и метод metod_testy");
            Console.WriteLine(" используеться шас выводя str в приложении");
            Console.WriteLine(" ///////////////////////////////\n\n");
            Console.WriteLine(str);
            
            Console.ReadKey(true);
        }
    }
}
Чтоб не выводило как вот на фото
а написала что нету библиотеки
да и все

а когда библиотека будет выполняло метод metod_testy з библиотеки

Помогите пожалуйста, скинте пример
0
Миниатюры
Как использовать методы библиотеки DLL, и игнорировать их, когда DLL нету?  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2015, 18:13
Ответы с готовыми решениями:

Как использовать подпрограммы из библиотеки <.DLL> в программах?
Как использовать подпрограммы из библиотеки &lt;.DLL&gt; в программах на Visual C++, (статически) если...

Как указатели из библиотеки dll на с++ использовать в delphi
Добрый день. Вопрос состоит в следующем, у меня есть библиотека на c++, из которой нужно утащить...

Как заставить программу использовать \system32\shell32.dll, а не \путь к проге\Interop.Shell32.dll
Это неудобно для Portable программы..

Где взять библиотеки JSCore.dll и WebKitCore.dll
Доброго времени суток. Скачал ExpressoBrowser-master, пытаюсь запустить через SharpDevelop 4.4,...

4
maxillion
277 / 187 / 52
Регистрация: 25.12.2012
Сообщений: 624
05.01.2015, 22:31 2
C#
1
2
3
4
5
6
7
8
9
10
string fi = AppDomain.CurrentDomain.BaseDirectory + "\\" + file_dll;
Assembly dll = null;
 
if (File.Exists(fi))
    dll = Assembly.LoadFile(fi);
else
{
    Console.WriteLine("Библиотека отсутствует : " + fi);
    Console.ReadKey(true);
}
1
GENDALF_ISTARI
13 / 30 / 19
Регистрация: 20.08.2013
Сообщений: 717
06.01.2015, 00:42  [ТС] 3
Ты та молодец maxillion что ответил

а как притулить в твоем коде метод на выполнение с библиотеки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using swich_lib;
 
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkCyan;
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.White;
            Console.Title = "Тест библиотек";
            Assambly_dll_exist("swich_lib.dll");
        }
 
       
 
        
        static void Assambly_dll_exist(string file_dll)
        {
 
            string fi = AppDomain.CurrentDomain.BaseDirectory + "\\" + file_dll;
            Assembly dll = null;
 
            if (File.Exists(fi))
            {
                dll = Assembly.LoadFile(fi);
                test_class test = new test_class();
                test.metod_testy("Текст вывожу"); // метод библиотеки
            }
            else
            {
                Console.WriteLine("Библиотека отсутствует : " + fi);
                Console.ReadKey(true);
            }
 
        }
    }
}
Дело в том что если я вот притулил этот метод с библиотеки
в условии когда библиотека существует - все это нормально
но как только библиотеку уберу
то прога спляшет мне ошибку - не написав что библиотеки нету
тупо закроеться потому что метод что я всунул даст ошибку потому что библиотеки нету
- а это мне не надо
мне надо чтоб написало что библиотеки нету
и все , а когда библиотека появиться вот тогда выполняла метод

Добавлено через 5 минут
То есть метод выполнялся когда библиотека будет присутствовать
и не выполнялся когда библиотеки нету
и написало что библиотеки нету - при этом не закрывая прогу
и без ошибочного выхода с проги
0
ntlinuxnt
$ su
1600 / 515 / 97
Регистрация: 18.11.2010
Сообщений: 2,806
Записей в блоге: 2
Завершенные тесты: 5
06.01.2015, 02:23 4
Эмм

Добавлено через 18 секунд
А как насчет линковки? Тогда и париться не надо.
0
GENDALF_ISTARI
13 / 30 / 19
Регистрация: 20.08.2013
Сообщений: 717
06.01.2015, 03:42  [ТС] 5
Дак раскажи что это и как ?

Добавлено через 1 минуту
скинь примеры ))))

Добавлено через 6 минут
А то я тоже так могу на словах
И небо упадет на землю , и реки потекут в спять
0
06.01.2015, 03:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2015, 03:42

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

Слетели библиотеки .dll При запуске любых приложений на компьютере вылетает ошибка с расширением .dll
Не запускается приложения на windows 8. А также удалились точки доступа Восстановления Системы и...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Библиотеки libeay32.dll ssleay32.dll
procedure TForm1.Button5Click(Sender: TObject); var LoadStream : TMemoryStream; begin...

Использовать unmanaged C++ dll из ресурсов managed C# dll
Как некоторые знают, C# компилируется в CIL код который легко читается декомпиляторами, моя же цель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.