Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание библиотеки классов с последующим присоединением *.dll к другим проектам / 20 сообщений из 20, страница 1 из 1
16.08.2013, 09:08
    #38368442
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Всем привет!
Пытаюсь создать небольшую библиотеку наподобие того, что приведенно ниже.
Полученная библиотека не присоединяется к проекту. Не пишет ничего.
Знаю, что по синтаксису не правильно пишу. Хочу, чтобы все функции и процедуры из моей библиотеки были доступны из других проектов.
Заранее спасибо.

Код: vbnet
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.
'библиотека классов
Public Class All
    Dim a As Double
    Dim d As Double
    Dim c As Double
    Public Shared Sub AddNum(ByVal a As Double, ByVal d As Double, ByRef c As Double)
        a_q(a)
        c = a_q(a) + d
    End Sub
    Public Shared Function a_q(ByRef a As Double) As Double
        a_q = a * a
        'Return a
    End Function
    Public Shared Sub d_q(ByRef d As Double)
        d = d * d
    End Sub
End Class

'сторонний проект
Imports ClassLibrary1

Public Class Form1
    Dim c As Double
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        All.AddNum(2, 3, c)
    End Sub

End Class
...
Рейтинг: 0 / 0
16.08.2013, 11:06
    #38368627
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV,

в References проекта добавил свою библиотеку?

Что значит
авторПолученная библиотека не присоединяется к проекту. Не пишет ничего.


какая-то ошибка падает?
...
Рейтинг: 0 / 0
16.08.2013, 12:18
    #38368781
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Pallaris,

Именно так и пытался добавить. Не получается.
Мой код немного сложнее, но написан в той же манере, что и вышеприведенный.
Есть множество предупреждений о том, что переменная передаётся по ссылке до присвоения значения, а так же есть неиспользованные локальные переменные.
Может ли это повлиять?
...
Рейтинг: 0 / 0
16.08.2013, 12:20
    #38368786
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV,

ну что значит не получается?

Почему закомментировано "Return a" в a_q? Мега-библиотека вообще компилируется твоя?
...
Рейтинг: 0 / 0
16.08.2013, 12:32
    #38368805
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Pallaris,

есть небольшая описка в примере не относящаяся к сути дела.
Пример компилируется, присоединяется и работает со сторонним проектом.

А вот мегабиблиотека моя не присоединяется и всё тут!
Если просто присоединяю её как существующий элемент в классе, все нормально работает.
Если я пытаюсь добавить dll-ку скомпилированную из этого класса, то ничего.

Может проблема в объявлении переменных?
...
Рейтинг: 0 / 0
16.08.2013, 12:36
    #38368810
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
[quot MAGRAV
Пример компилируется, присоединяется и работает со сторонним проектом.
.....
А вот мегабиблиотека моя не присоединяется и всё тут!
[/quot]

Я ничего не понял - тот кусок кода, который ты привел вверху - это пример или твоя мега-библиотека? Если пример, и он компилируется и нормально цепляется к стороннему проекту - на кой ты его сюда вписал?
...
Рейтинг: 0 / 0
16.08.2013, 12:41
    #38368821
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Pallaris,

Потому, что мегабиблиотека большая по объёму кода. Там много математики и логики. Не информативно. Пытался в примере показать сам принцип, как я работаю.
...
Рейтинг: 0 / 0
16.08.2013, 13:38
    #38368895
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV, твой класс плохо спроектирован. Предупреждения о передаче переменной по ссылке до иниициализации говорят именно об этом.

1) ByRef аргументы лучше не использовать т.к. они запутывают код. Глядя на вызов All.AddNum(2, 3, c) нельзя сразу понять что третий аргумент будет изменен в результате вызова. Советую полностью избавиться от ByRef аргументов. Возращай модифицированное значение из функции или меняй экземлярное поле класса.

2) В твоем классе есть экземплярные поля и но не видно экземплярных методов, а только shared методы. Странное сочетание. В данном случае надо скорее только экземплярные или только shared.
...
Рейтинг: 0 / 0
16.08.2013, 17:07
    #38369211
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
bazile,

Вы бы мне очень помогли, еслиб показали как этот же пример представить грамотно.
...
Рейтинг: 0 / 0
16.08.2013, 17:50
    #38369288
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV, конкретно твой пример можно переписать так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
'библиотека классов
Public Class All
    Public Shared Function AddNum(ByVal a As Double, ByVal d As Double) As Double
        Return a*a + d
    End Function
End Class

'сторонний проект
Imports ClassLibrary1

Public Class Form1
    Dim c As Double
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        с = All.AddNum(2, 3)
    End Sub

End Class



Методы a_q и d_q я выкинул т.к. не вижу никакого смысла выносить возведение в квадрат в отдельную функцию.
...
Рейтинг: 0 / 0
16.08.2013, 18:04
    #38369313
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
bazile,

Спасибо конечно.
Попытаюсь объяснить свою ситуацию. У меня масса логических-математических функций и процедур. Создание каждой из них потребовала вагон времени и сил. Они все как бэ работают на одно дело. Это своеобразная мат.модэль. Её вид не окончателен и постоянно претерпевает изменения. Отлаживаю эти модуля в специально предназначенном для этого проекте. Сейчас возникла необходимость представить этот код в виде библиотеки.
Можно переиначить всё один раз, но делать это каждый раз....
Есть ли способ с минимальным переделками кода добиться необходимого результата?
...
Рейтинг: 0 / 0
16.08.2013, 18:39
    #38369356
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV, ок, оставим пока вопрос дизайна в стороне.

Для создания библиотеки достаточно создать новый Class Library проект, сделать Project Reference на него из другого, добавить Imports и твой класс должен быть виден. Все ли из перечисленного ты выполнил? Если да, то какие ошибки ты получаешь?
...
Рейтинг: 0 / 0
16.08.2013, 18:52
    #38369365
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
bazile,

Всё перечисленное я выполнил. Полученная библиотека просто игнорируется обозревателем, т.е. она не добавляется в папку с проектом.

Попробую не использовать ByRef, а вместо этого применить Return. Потом отпишу. Спасибо за рекомендации!
...
Рейтинг: 0 / 0
16.08.2013, 19:04
    #38369383
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAVВсё перечисленное я выполнил. Полученная библиотека просто игнорируется обозревателем, т.е. она не добавляется в папку с проектом.
Под "обозревателем" ты имеешь в виду solution explorer? Вообще ты что-то путаешь. Если ты добавил project reference на свою библиотеку, то она уже должна быть в твоем solution иначе project reference не добавить. Ты скорее всего добавил dll reference. В этом случае проект в solution не добавляется.

Удали dll reference, затем щелкни правой кнопкой на имени solution и выбери команду add - new project. Выбери Class Library. Скопируй тело своего класс All в новый проект. Далее как я писал выше.
...
Рейтинг: 0 / 0
10.09.2013, 07:40
    #38391659
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
И снова доброго времени суток! К сожалению катастрафически нехватает времени домучать мой вопрос.
Предъидущее обсуждение зашло в тупик. Я не правильно, повидимому, поставил задачу. Попытаюсь вновь.
В предъидущем примере небыло передачи массивов. Я привык писать так, чтобы выносить особоважные куски своего кода в модуля. С применением "Sub...", "Function..." и т.д. и т.п. Хочу писать это всё грамотно в классах, чтобы в последующем создавать подключаемые dll. Но научиться одно, а вот многолетненакопленные результаты труда в старом (практически процедурном) стиле переиначить на новые рельсы классов хочется с минимальными потерями и переделками. Для меня раздробление конструкций заключённых в мои "Sub..." и "Function..." почти равноценно утере. Хотя может быть у страха глаза велики).

Вот пример моей неудачной попытки создания примитивного мат.класса. В нём недопустимо слияние конструкций заключённых в "Sub..." и "Function...", как это мне уже успели посоветовать форумчане. Это принципиальный пример моего подхода.
Покажите пожалуйста, как это модифицировать в стиле классов во всей их красе!? Заранее спасибо!

авторPublic Class All
Public a() As Double
Public d() As Double
Public c As Double
Public Shared Sub AddNum(ByVal a() As Double, ByVal d() As Double, ByRef c As Double)
Dim ff As Double

d_q(d, ff)
c = a_q(a) + ff
End Sub
Public Shared Function a_q(ByVal a() As Double) As Double
Dim i As Integer
a_q = 0
For i = 1 To a(0)
a_q = a_q + a(i)
Next i
'Return a_q
End Function
Public Shared Sub d_q(ByRef d() As Double, ByVal ff As Double)
Dim i As Integer
ff = 0
For i = 1 To d(0)
ff = ff + d(i)
Next i
End Sub
End Class
...
Рейтинг: 0 / 0
10.09.2013, 08:23
    #38391678
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV,

Не надо ничего делать просто ради того, чтобы было 'в стиле классов'. Классы нужны, чтобы пользоваться их преимуществами - наследование, инкапсулирование, абстракция. Если весь вопрос в реализации нескольких вырвиглзных мат функций, которые не будут меняться, то идея класс нужен лишь чтоб логически обозвать их все. Почитай какой-нибудь букварь по Бейсику, глядишь поймешь что тебе надо.
...
Рейтинг: 0 / 0
10.09.2013, 08:38
    #38391689
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV...Хочу писать это всё грамотно в классах, чтобы в последующем создавать подключаемые dll....[/quot]

Не прихоть у меня. "Hello World"-ов навалом в нэте. По ним понятно, как билетную кассу организовать. Красотища. А вот с примером вроде калькулятора ничего!
Лучше ничего не ответить чем слать на несколько букв, если помоч не можем.
...
Рейтинг: 0 / 0
10.09.2013, 08:57
    #38391696
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
MAGRAV,

Калькуляторов не меньше чем хеловорлдов, лишь бы в гугле аккаунт не забанен был. Еще раз - почитай букварь. Тот кусок кода, что ты написал, в классе не нуждается
...
Рейтинг: 0 / 0
10.09.2013, 09:07
    #38391706
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Pallaris,

Прочту непременно! Значит основывая на ваших рекомендациях я смогу скомпелировать вышеприведенный код в библиотеку DLL, подцепить её к своим проектам и она будет исправно работать с ними в режиме совместного и одновременного доступа...?
Ведь я этого добиваюсь...
...
Рейтинг: 0 / 0
10.09.2013, 09:59
    #38391770
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание библиотеки классов с последующим присоединением *.dll к другим проектам
Сможешь, если нигде не напортачил.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание библиотеки классов с последующим присоединением *.dll к другим проектам / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]