Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Как создать и подключить DLL на VB.NET? Помогите


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

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

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

Автор: contramundum 27.11.2007, 16:19
эм... а код в этой библиотеке как должен выглядеть? типо из Sub-ов? smile 

Автор: thomas 27.11.2007, 16:49
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
    }
}



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

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

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

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

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

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

Автор: Experimenter 27.11.2007, 18:18
contramundum, 
Цитата

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

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

Переводчик: http://www.carlosag.net/Tools/CodeTranslator/Default.aspx 
Только все равно нужно знать азы обеих языков... машина блин...
Админы, повесьте переводчик на видном месте!

Автор: contramundum 29.11.2007, 15:27
Цитата

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

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

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

вот так, да? smile 

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

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

Автор: contramundum 30.11.2007, 09:54
ага, понятно... то есть:
Код

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

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

ясно! спасибо! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)