Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: DLL в VB.NET 2005 Добавлено: 21.06.06 17:20  

Автор вопроса:  ZXC
Собственно как юзать DLLки в vb.net? можно простенький пример? например есть форма, ложем в папку с этой формой DLLку в которой будет переменная например со значением "работает" и при загрузке формы считываем в текстовое поле эту переменную, кто знает расскажите как считывать из DLLки? Спасибо

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 1
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #1 Добавлено: 21.06.06 17:24
Подключать как ресурсы, Опции, РЕсурс подключить, указать путь, всё как и в вб6 оцхы

Тогда ты в експлорере проекта (справа вверху) видишь этот ресурс и можешь ссылаться на его классы, т е объявить объект типа такого что описан в твоей дллке

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 21.06.06 17:51
Подключать как ресурсы

маленькая поправка.. References

Делается это через свойства проекта на вкладке References. Нажимаешь там кнопку Add, указываешь путь к своей DLL, и после этого тебе будет доступно все, что есть в твоей DLL..
И используешь как обычные классы..

Ответить

Номер ответа: 3
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #3 Добавлено: 22.06.06 00:06
Чото я не понял....нувот создал DLLку прикрепил к проекту, в DDLке написал
Dim primer As String = "Считываю данные из DDLки"


и теперь как при загрузке формы проекта считать эту перменную (primer) в текстовое поле? :=)

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 22.06.06 00:26
Чото я не понял....

а чо тут не понятного?
у тебя объявлено Dim.. что равносильно Private... намек понял???
и второй момент.. не забудь импортировать пространство имен...

Ответить

Номер ответа: 5
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #5 Добавлено: 22.06.06 09:22
намек понял???

нет =)
не забудь импортировать пространство имен...

это как?

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 22.06.06 14:56
:-)))))
Ну раз намека ты не понял, тогда объясняю... есть такое понятие - Зона видимости переменной..
она может быть
Private
Protected
Friend
Protected Friend
Public

У тебя переменная объявлена как Dim, что равносильно Private.. Другими словами - это закрытая (частная) переменная, которая будет доступна только на том уровне, где ты её объявил.. Это может быть на уровне класса, модуля процедуры, формы .. и т.д.. НО НИКАК НЕ ИЗ ДРУГОГО МЕСТА!!!!
Говоря еще проще.. тебе её надо было объявить как Friend или Public.. тогда она будет видна для всего проекта в целом..

Что касается DLL и пространства имен, то примерчик накидаю чуть позже, ибо объяснять на пальцах это очень долго...

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 22.06.06 18:27
'// Это код DLL
'// у меня она называется SampleDLL( по умолчанию имеет название ClassLibrary1)

'// Это называется пространство имен, которое можно и не использовать,
'// но считается правилом хорошего тона в программировании, так как
'// позволяет избежать путаницы с названием классов и облегчает чтение кода..
'// К примеру: у тебя в проекте есть 2 класса с одинаковы названиями
'// и вот чтобы их можно было различить, используют пространство имен..(Namespace)
Namespace Sample

    '// По-умолчанию, в проекте DLL (Class Library) создается класс
    '// с названием Class1.. я переименовал его в Test для удобства
    Public Class Test

        Public Shared ReadOnly Primer As String = "Hello from my first DLL"
        Public Const CAPTION As String = "Special for " & MY_NAME

        '// Эта константа объявлена как Private, значит за пределами этого
        '// класса она будет недоступна
        Private Const MY_NAME As String = "ZXC"

#Region " Public Property Name "

        Private _name As String = ""
        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal Value As String)
                _name = Value
            End Set
        End Property

#End Region

        Public Shared ReadOnly Property PI() As Double
            Get
                Return Math.PI
            End Get
        End Property

    End Class

End Namespace


'// Просто для сравнения привожу пример другого класса
'// без использования Namespace
Public Class API

    Private Declare Function Beep Lib "kernel32.dll" (ByVal dwFreq As Int32, _
                                                      ByVal dwDuration As Int32) As Int32

    '// Воспроизводим звук с указанной частотой и длительностью...
    Public Shared Sub BeepSound(ByVal dwFreq As Int32, ByVal dwDuration As Int32)
        Beep(dwFreq, dwDuration)
    End Sub

End Class

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 22.06.06 18:32
Затем откомпилируй DLL, закрой проект и создай новый (стандартный с формой). Подключи к этому проекту эту DLL .. на форму положи 4 кнопки.. далее скопируй этот код..

'// КОД ФОРМЫ
'// На форму положи 4 кнопки...

'// Импортируем пространство имен
Imports SampleDLL.Sample

Public Class Form1

    '// Пример #1
    '// - Вызов константы CAPTION
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '// Поскольку константа у нас объявлена как Shared, то для её использования
        '// создавать экземляр класса (Dim testClass As New Test)не нужно...
        '// Просто берем и вызываем
        Me.Text = Test.CAPTION
        '// Эта константа использует другую - MY_NAME, но отсюда ты ее не сможешь использовать
        '// так как она у нас объявлена как Private
    End Sub

    '// Пример #2
    '// - Воспроизведение звука... вызов ф-ции из другого класса нашей DLL
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '// Поскольку мы в самом начале НЕ импортировали пространство
        '// имен ... (Imports SampleDLL), поэтому путь к ф-ции указываем полностью
        For Freq As Int32 = 250 To 750
            SampleDLL.API.BeepSound(Freq, 10)
            Me.Text = "Частота: " & Freq
            Application.DoEvents()
        Next
    End Sub

    '// Пример #3
    '// - Вызов строковой переменной Primer
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        '// Поскольку она у нас объявлена как ReadOnly (только для чтения) то изменить её ты НЕ сможешь..
        '// другими словами она у нас практически тоже самое что и константа
        MessageBox.Show(Test.Primer, Test.CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Information)
        '// Если убрать ReadOnly, то ты сможешь сделать так: Test.Primer = "Новое значение"
    End Sub

    '// Пример #4
    '// - получение числа PI
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Text = Test.PI
    End Sub

    '// Пример #5
    '// - использование свойства Name
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        '// Поскольку свойство у нас НЕ помечено как Shared, то для его использования
        '// создаем экземляр класса
        Dim classFromDLL As New Test
        '// после этого можешь использовать его как угодно..
        classFromDLL.Name = "Вася Пупкин"
        MessageBox.Show("My name is " & classFromDLL.Name, Test.CAPTION, _
                                            MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub

End Class

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 22.06.06 18:34
Ну и в заключении хочу добавить от себя лично.. (набрал полную грудь воздуха)

ЧИТАЙ, БЛИН, КНИГИ!!!!!!!

Ответить

Номер ответа: 10
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #10 Добавлено: 22.06.06 23:22
эх, разачаровало меня то, что в vb по-прежнему нельзя писать native dll... В vb6 можно было выкрутиться, но там стока мук из-за этого было...

Ответить

Номер ответа: 11
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #11 Добавлено: 22.06.06 23:24
а хотя этого следовало ожидать - ведь одна из целей .net framework - заменить собою api-интерфейс

Ответить

Номер ответа: 12
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #12 Добавлено: 23.06.06 10:32
Eros спасибо конечно, но вот вопрос один :-)))Вообщем в DLLке у меня только вот такой код
Public Class Test

    Public Const Text As String = "Работает!"

End Class


Итак, компилирую я эту DLLку, добавляю в проект, запускаю его и при нажатии на кнопку вызываю вот такой код

TextBox1.Text=test.Text

и так, всё работает! но! я компилирую форму и в папке появляется эексешник формы и dllка! так вот, я запускаю форму жму кнопку всё работает так надо но когда я перекампилрую DDLку и изменю содержимое переменной Text тоя заменяю старую DLLку новой, Но при нажатии на кнопку мне всё равно в текстовом поле показывается старый текст!!!! и к тому же если я вообще удаляю DLLку из папки и жму на кнопку ошибки НЕТ! и в текстовом поле опять старый текст :-))))) надеюсь понятно объяснил :)

Ответить

Номер ответа: 13
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #13 Добавлено: 23.06.06 14:15
пришла одна мысль - возможно код из dll'ки импортируется в код exe'шника

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 23.06.06 16:06
возможно код из dll'ки импортируется в код exe'шника

исключено.. это из области фантастики... )))

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 23.06.06 16:13
если я вообще удаляю DLLку из папки и жму на кнопку ошибки НЕТ! и в текстовом поле опять старый текст

Надеюсь, ты понимаешь, что чудес на свете не бывает???
Значит либо ты не ту библиотеку удалил, либо удалил, но не из той папки.. она может быть как в Debug , так и в Release...
А вообще, если делать по уму, то надо использовать 2 проекта в одном решении.. тогда у тебя тебя всегда будет использоваться свежая копия DLL
Только там один момент... при добавлении ссылки на DLL.. появиться новая вкладка Projects на которой будет отображаться проект твоей DLL.. вот ее и добавишь в референс..

А чтобы не появлялся старый текст, просто обнови ссылку на библиотеку(добавь ее снова).. тогда у тебя будет использоваться новая версия либы..

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам