Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать и подключить DLL на VB.NET? Помогите, Помогите в создании DLL 
:(
    Опции темы
Nikitozz
Дата 7.11.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 19.9.2007
Где: Москва

Репутация: нет
Всего: 0



Ребята помогите пожалуйста. Подскажите как создать DLL библиотеку? Как эту библиотеку подключить к программе, например при нажатии кнопки? И подскажите пожалуйста что вообще можно делать с ДЛЛ, можно ли туда запихнуть интерфес программы?

Использую VB.NET 2003

Это сообщение отредактировал(а) Nikitozz - 7.11.2007, 10:37
PM MAIL WWW   Вверх
Experimenter
Дата 8.11.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: нет
Всего: 17



Создается стандартными средствами студии New Project -> (Тип проекта) Class Library. Пишешь код, реализующий твою библиотеку, компилишь. Чтоб использовать, добавляешь референс на нее и юзаешь так же как стандартные библиотеки .NET


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
contramundum
Дата 27.11.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.11.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



эм... а код в этой библиотеке как должен выглядеть? типо из Sub-ов? smile 
PM MAIL   Вверх
thomas
Дата 27.11.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



contramundum, 
Библиотеки содержат классы.
А в классах можно реализовывать все необходимые свойства, методы и функции для решения поставленных задач.
К примеру у меня есть класс описывающий фактуру. Он находится вместе с другими классами в библиотеке классов. Я подключаю эту библиотеку к проекту и из него вызываю методы, функции и свойства, которые нужны.
Вот пример класса на C#, разницы в принципе ни какой, только синтаксис другой.
Код

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.ComponentModel;

namespace HuisWerkBl
{
    class Factuur : INotifyPropertyChanged 
    {
        #region Properties

        private string _factuurnr;
        public string Factuurnr
        {
            get { return _factuurnr; }
            set { _factuurnr = value; }
        }

        private DateTime _datum;
        public DateTime Datum
        {
            get
            {
                return _datum;
            }
            set
            {
                if (!value.Equals(_datum))
                {
                    _datum = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("datum"));
                    }
                }
            }
        }

        private string _klantnaam;
        public string Klantnaam
        {
            get { return _klantnaam; }
            set
            {
                if (!value.Equals(_klantnaam))
                {
                    _klantnaam = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("klantnaam"));
                    }
                }
            }
        }

        private string _klantadres;
        public string Klantadres
        {
            get
            {
                return _klantadres;
            }
            set
            {
                if (!value.Equals(_klantadres))
                {
                    _klantadres = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("klantadres"));
                    }
                }
            }
        }

        private string _klantpostnr;
        public string Klantpostnr
        {
            get
            {
                return _klantpostnr;
            }
            set
            {
                if (!value.Equals(_klantpostnr))
                {
                    _klantpostnr = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("klantpostnr"));
                    }
                }
            }
        }

        private string _klantgemeente;
        public string Klantgemeente
        {
            get
            {
                return _klantgemeente;
            }
            set
            {
                if (!value.Equals(_klantgemeente))
                {
                    _klantgemeente = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("klantgemeentes"));
                    }
                }
            }
        }

        private string _btw;
        public string Btw
        {
            get
            {
                return _btw;
            }
            set
            {
                if (!value.Equals(_btw))
                {
                    _btw = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("btw"));
                    }
                }
            }
        }

        #endregion

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        #region Static CRUD Methods

        #region Public Methods

        public static List<Factuur> GetEntityList()
        {
            List<Factuur> factuurList = new List<Factuur>();

            using (SqlConnection con = new SqlConnection(Common.conStr))
            {
                string sql = "SELECT factuurnr, datum, klantnaam, klantadres, klantpostnr, klantgemeente, btw FROM tblFactuur";
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    cmd.CommandType = CommandType.Text;
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while (rdr.Read())
                    {
                        Factuur factuur = FillFactuur(rdr);
                        factuurList.Add(factuur);
                    }
                    if (!rdr.IsClosed)
                        rdr.Close();
                }
            }
            return factuurList;
        }

        public static Factuur GetEntity(string factuurnr)
        {
            Factuur factuur = null;

            using (SqlConnection con = new SqlConnection(Common.conStr))
            {
                string proc = "pr_Factuur";
                using (SqlCommand cmd = new SqlCommand(proc, con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@factuurnr", factuurnr);
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    if (rdr.HasRows)
                    {
                        rdr.Read();
                        factuur = FillFactuur(rdr);
                    }
                    if (!rdr.IsClosed)
                        rdr.Close();
                }
            }
            return factuur;
        }

        public static Factuur SaveEntity(Factuur factuur)
        {
            if (factuur.Factuurnr != null)
                return UpdateEntity(factuur);
            else
                return AddEntity(factuur);
        }

        public static void DeleteEntity(Factuur factuur)
        {
            using (SqlConnection con = new SqlConnection(Common.conStr))
            {
                string proc = "pr_Factuur_Delete";
                using (SqlCommand cmd = new SqlCommand(proc, con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@factuurnr", factuur.Factuurnr);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }

        #endregion

        #region Private Methods

        private static Factuur FillFactuur(SqlDataReader rdr)
        {
            Factuur factuur = new Factuur();
            factuur.Factuurnr = rdr["factuurnr"].ToString();
            factuur.Datum = Convert.ToDateTime(rdr["datum"]);
            factuur.Klantnaam = rdr["klantnaam"].ToString();
            factuur.Klantadres = rdr["klantadres"].ToString();
            factuur.Klantpostnr = rdr["klantpostnr"].ToString();
            factuur.Klantgemeente = rdr["klantgemeente"].ToString();
            factuur.Btw = rdr["btw"].ToString();
            return factuur;
        }

        private static Factuur UpdateEntity(Factuur factuur)
        {
            using (SqlConnection con = new SqlConnection(Common.conStr))
            { 
                string proc = "pr_Factuur_Update";
                using (SqlCommand cmd = new SqlCommand(proc, con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@factuurnr", factuur.Factuurnr);
                    cmd.Parameters.AddWithValue("@datum", factuur.Datum);
                    cmd.Parameters.AddWithValue("@klantnaam", factuur.Klantnaam);
                    cmd.Parameters.AddWithValue("@klantadres", factuur.Klantadres);
                    cmd.Parameters.AddWithValue("@klantpostnr", factuur.Klantpostnr);
                    cmd.Parameters.AddWithValue("@klantgemeente", factuur.Klantgemeente);
                    cmd.Parameters.AddWithValue("@btw", factuur.Btw);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            factuur = GetEntity(factuur.Factuurnr);
            return factuur;
        }
        // доработать параметры
        private static Factuur AddEntity(Factuur factuur)
        {
            string factuurnr = "";
            using (SqlConnection con = new SqlConnection(Common.conStr))
            { 
                string proc = "pr_Factuur_Add";
                using (SqlCommand cmd = new SqlCommand(proc, con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@datum", factuur.Datum);
                    cmd.Parameters.AddWithValue("@klantnaam", factuur.Klantnaam);
                    cmd.Parameters.AddWithValue("@klantadres", factuur.Klantadres);
                    cmd.Parameters.AddWithValue("@klantpostnr", factuur.Klantpostnr);
                    cmd.Parameters.AddWithValue("@klantgemeente", factuur.Klantgemeente);
                    cmd.Parameters.AddWithValue("@btw", factuur.Btw);
                    cmd.Parameters.Add(new SqlParameter("@factuurnr", SqlDbType.NChar));
                    cmd.Parameters["@factuurnr"].Direction = ParameterDirection.Output;
                    con.Open();
                    cmd.ExecuteNonQuery();
                    factuurnr = cmd.Parameters["@factuurnr"].Value.ToString();
                }
                factuur = GetEntity(factuurnr);
            }
            return factuur;
        }

        private static object GetValue(object value)
        {
            if (value == null)
                return DBNull.Value;
            else
                return value;
        }

        #endregion

        #endregion
    }
}





--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
contramundum
Дата 27.11.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.11.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



кхм.. эээ... спасибо конечно smile , но я в vb.net-то шарю плохо, а в Си++ ваще как свинья в апельсинах... можно маааленький пример самой простенькой библиотеки на вб.нет? smile 
PM MAIL   Вверх
thomas
Дата 27.11.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



contramundum, 
Да я ж сказал что разницы никакой какой язык использовать.
Привел пример класса из моей библиотечки для маленькой учебной программки.
Цитата

я в vb.net-то шарю плохо

Это не страшно, научитесь. Постепенно. Поэтому советую, пока, не бежать впереди паровоза, а осваивать азы: синтаксис языка, простые методы и функции и далее классы (ООП).
Когда более мение будете разбираться в классах, тут то и понадобяться библиотеки классов.

И обычно в библиотеки включают "универсальные" классы которые можно использовать в различных программах для решения задач, решаемых в этих классах.

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


Это сообщение отредактировал(а) thomas - 27.11.2007, 17:21


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Experimenter
Дата 27.11.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: нет
Всего: 17



contramundum, 
Цитата

эм... а код в этой библиотеке как должен выглядеть? типо из Sub-ов?
типо да! Отличие библиотеки от приложения (виндового или консольного) в том, что в ней отсутствует метод Main().


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
alexburzak
  Дата 28.11.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 12.3.2007
Где: Hadera

Репутация: нет
Всего: 1



Цитата(contramundum @ 27.11.2007,  17:01)
кхм.. эээ... спасибо конечно smile , но я в vb.net-то шарю плохо, а в Си++ ваще как свинья в апельсинах... можно маааленький пример самой простенькой библиотеки на вб.нет? smile

Переводчик: http://www.carlosag.net/Tools/CodeTranslator/Default.aspx 
Только все равно нужно знать азы обеих языков... машина блин...
Админы, повесьте переводчик на видном месте!
PM   Вверх
contramundum
Дата 29.11.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.11.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата

Отличие библиотеки от приложения (виндового или консольного) в том, что в ней отсутствует метод Main().

ааааа!.. ...а заголовок? 
Код

class MyLibrary
sub ..... ... ...
...
end sub
end class

вот так, да? smile 
PM MAIL   Вверх
Experimenter
Дата 29.11.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: нет
Всего: 17



contramundum, совершенно верно, а также можно создавать Properties, Events. Далее после компиляции можно ее юзать (dll).

ЗЫ. Одно существенное дополнение: методы и свойства, которые желаешь юзать из другого проекта, должны объявляться открытыми (public)

Это сообщение отредактировал(а) Experimenter - 29.11.2007, 18:57


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
contramundum
Дата 30.11.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 20.11.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



ага, понятно... то есть:
Код

class MyLibrary
public sub ...
...
end sub

public function ...
...
end function
end class

ясно! спасибо! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.