123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
1
.NET 2.x

Как динамически подключить библиотеку написанную на NET

05.05.2014, 17:20. Показов 2006. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
И получить доступ к процедурам и функциям которые она содержит?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2014, 17:20
Ответы с готовыми решениями:

Как подключить к моему проекту в VB.NET библиотеку АДО?
Только сегодня приступил к изучению VB.NET, раньше плотно работал с VBA и такие штуки мне...

Как написать библиотеку на VB .NET и подключить к проекту на C#
Создайте библиотеку на VB.NET со следующим содержимым: Создайте структуру для хранения записей...

Библиотеку С++ подключить к VB.NET
Можно? ...Или можно ли сделать так: библиотеку С++(билдеровскую) подключить к С++.NET, сделать...

Как динамически загрузить библиотеку
Был код на VC++ 6.0: HMODULE libraryHandle = LoadLibraryEx( libraryName, 0,...

7
Строитель
886 / 553 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
05.05.2014, 17:27 2
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
     Dim Assembly = Reflection.Assembly.LoadFile(Application.ExecutablePath)
        Dim ResultInfo As String = ""
        For Each n In Assembly.GetExportedTypes 'получаем классы
            ResultInfo &= n.Name & vbNewLine
            For Each p In n.GetProperties() 'получаем свойства
                ResultInfo &= "     " & p.Name & vbNewLine
            Next
            For Each p In n.GetMethods() 'получаем методы
                ResultInfo &= "     " & p.Name & vbNewLine
            Next
        Next
        MsgBox(ResultInfo)
1
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
05.05.2014, 20:30  [ТС] 3
Отлично, список процедур я получил, а как мне теперь к ним обратиться?
0
Строитель
886 / 553 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
05.05.2014, 23:25 4
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  'подключаем динамически наш проект
        Dim Assembly = Reflection.Assembly.LoadFile(Application.ExecutablePath)
        'и создаём копию Form1
        'обращаемся к классу Form1
        Dim TForm = Assembly.CreateInstance("WindowsApplication1.Form1")
        'и вызываем функцию Show
        'есть два способа вызвать функцию
        'первый: TForm.Show()
        'второй:
        TForm.GetType.InvokeMember("Show", Reflection.BindingFlags.InvokeMethod, Nothing, TForm, Nothing)
        'другие примеры
        TForm.GetType.InvokeMember("Text", Reflection.BindingFlags.SetProperty, Nothing, TForm, {"HELLO"})
        TForm.GetType.InvokeMember("BackColor", Reflection.BindingFlags.SetProperty, Nothing, TForm, {Drawing.Color.Red})
        Dim resultHandle = TForm.GetType.InvokeMember("Handle", Reflection.BindingFlags.GetProperty, Nothing, TForm, Nothing)
        MsgBox("HANDLE: " & resultHandle.ToString)
        Dim result = TForm.GetType.InvokeMember("ToString", Reflection.BindingFlags.InvokeMethod, Nothing, TForm, Nothing)
        MsgBox(result)
2
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
06.05.2014, 16:29  [ТС] 5
Не совсем то что мне нужно было, но спасибо) Мне нужно было получить значение которое возвращает определенная функция. Нашел в интернете следующий код. Он работает. Но я не понимаю почему:
VB.NET
1
2
3
4
5
6
7
8
 Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Integer, ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Integer
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Integer) As Integer
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Integer, ByVal lpProcName As String) As Integer
 
    Public Function CallAPI(ByVal sLibName As String, ByVal sFuncName As String, Optional ByVal Param1 As Integer = 0, Optional ByVal Param2 As Integer = 0, Optional ByVal Param3 As Integer = 0, Optional ByVal Param4 As Integer = 0) As String
        Return sFuncName
    End Function
Выполняю я его так:

VB.NET
1
Dim a as string = CallAPI(My.Application.Info.DirectoryPath & "\options.dll", GetDBName)
Как ни странно, он выдает мне результат выполнения функции GetDBName хотя если посмотреть на код функции CallAPI он должен был бы мне вернуть просто значение "GetDBName"

Добавлено через 2 часа 30 минут
Ошибка была в коде, я не удалил ссылку на эту библиотеку.
Вопрос все еще актуален.

Добавлено через 28 минут
Nord790 Этот метод тоже не работает

Добавлено через 2 минуты
Еще раз что мне требуется: у меня есть программа к которой я хочу подключить библиотеку, во время выполнения и вызвать функцию из этой библиотеки. Как называется функция в библиотеке я знаю.

Добавлено через 29 минут
Попробовал еще одним способом:
VB.NET
1
Public Declare Function One Lib "ClassLibrary.dll" Alias "one" () As String
Но при обращении к этой функции возникает ошибка
System.EntryPointNotFoundException не обработано
Не удается найти точку входа "One" в DLL "ClassLibrary.dll".
0
Строитель
886 / 553 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
06.05.2014, 22:48 6
и так данный кода работает только с библиотекой .NET
VB.NET
1
2
3
4
5
6
 Dim Assembly = Reflection.Assembly.LoadFile("БИБЛИОТЕКА")
        For Each класс In Assembly.GetExportedTypes
            If класс.Name = "Имя Класса" Then
               Dim результат = класс.InvokeMember("Имя функции", Reflection.BindingFlags.InvokeMethod, Nothing, класс, Nothing)
            End If
        Next
0
Строитель
886 / 553 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
07.05.2014, 05:48 7
Лучший ответ Сообщение было отмечено Pe4eNEG как решение

Решение

вот примерчик
Вложения
Тип файла: zip WindowsApplication3.zip (120.9 Кб, 16 просмотров)
1
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
07.05.2014, 10:49  [ТС] 8
Nord790, спасибо огромное, все работает)

Для тех кому лень качать пример
Приложение:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'путь к библиотеке
        Dim assemblyFile As String = IO.Path.Combine(Application.StartupPath, "ClassLibrary1.dll")
        'загружаем библиотеку
        Dim _assembly = Reflection.Assembly.LoadFile(assemblyFile)
        'экспортируем клаcc "Class1", индекс у него 0
        Dim _type = CType(_assembly.GetExportedTypes.GetValue(0), Type)
        With _type
            'вызываем функцию "Hello"
            Dim result = .InvokeMember("Hello", Reflection.BindingFlags.InvokeMethod, Nothing, _type, Nothing)
            'отображаем результат
            MsgBox(result)
        End With
    End Sub
End Class
Библиотека:
VB.NET
1
2
3
4
5
Public Class Class1
    Shared Function Hello()
        Return "hello"
    End Function
End Class
0
07.05.2014, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2014, 10:49
Помогаю со студенческими работами здесь

Что нужно для того чтобу запустить программу написанную на VB.NET там, где нет VS.NET?
Вот только столкнулся с NET версией, и у меня возник такой детский вопрос: Что нужно для того...

Как подключить библиотеку, написанную на C++?
Приветствую. У меня есть функция на С++ которую я хочу поместить в библиотеку и использовать из...

Как подключить написанную библиотеку к программе?
Помогите, пожалуйста. Написала сама библиотеку: mPOOH.cpp #include "mPOOH.h" #include...

Как подключить к проекту библиотеку, написанную на C++
Здравствуйте! Есть замечательная библиотека математических функций...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru