Page 1 of 1

Cách tạo và dùng DLL trong VB.NET

Posted: Mon 26/07/2010 8:15 am
by lungocqua
Tên bài viết: Tạo và sử dụng DLL trong VB.NET
Tác giả: lungocqua
Cấp độ bài viết: Trung bình
Tóm tắt: Hướng dẫn cách tạo và sử dụng thư viện liên kết động trong VB.NET


Đề bắt đầu chúng ta hãy tìm hiểu một chút DLL là gì bằng cách xem liên kết dưới đây:
http://vi.wikipedia.org/wiki/DLL
----------------------------------
Để tạo được dll thì bạn cần phải có:
Tập tin cần biên dịch + Công cụ
+Tập tin cần biên dịch thường bao gồm các hàm và thủ tục của một lớp nào đó.
+Công cụ: Sử dụng Command Prompt trong bộ Visual Studio 2005 và tất nhiên là bạn có thể tìm thấy nó trong các phiên bản khác của bộ Visual Studio.

Image

Image
Lưu ý: Không tìm thấy công cụ này trong các phiên bản Express.

1. Tạo tập tin cần biên dịch:
Ở đây mình có sẵn một cái Project và bây giờ mình sẽ thêm một cái lớp và đặt tên cho nó là Class1.vb

Image

*Bạn có thể viết một lớp bằng Notepad và lưu với đuôi mở rộng là vb vẫn được.
Trong lớp Class1.vb mình sẽ viết một đoạn mã nhỏ:

Image
  1. Public Class Class1
  2.     ''' <summary>
  3.     ''' Hiện hộp thoại thông báo.
  4.     ''' </summary>
  5.     ''' <param name="str">Chuỗi kí tự sẽ hiển thị.</param>
  6.     ''' <remarks></remarks>
  7.     Sub tb(ByVal str As String)
  8.         MsgBox(str)
  9.     End Sub
  10. End Class


Lưu lại và tạm xong.
Sau đó vào Project và sao chép (Copy) cái lớp vừa tạo xong bỏ vào ổ đĩa bất kì.

Image

Ở đây thì mình chọn ở đĩa C.

Image

Mục đích của việc này là nhằm tránh lỗi phát sinh khi biên dịch vì công cụ không tìm thấy được tập tin cần biên dịch.
Ví dụ: Nếu như mình bỏ tập tin đó vào thư mục có tên là V S

Image

Thì sẽ có lỗi như sau:

Image

Hình như nó không chấp nhận đường dẫn có khoảng trắng nên mới phát sinh lỗi như thế.
Bạn có thể dùng lệnh cddir trên Command Prompt của Visual Studio để trỏ tới thư mục chứa tập tin cần biên dịch đó.

Mình thì không rành về các lệnh trong DOS cho lắm cho nên Copy rồi Paste cho chắn ăn! :D

2. Biên dịch:
Cú pháp biên dịch:

Code: Select all

vbc /target:library <tên đường dẫn đầy đủ của tập tin>

Lưu ý: Nếu như bạn đã trỏ đến thư mục chứa tập tin đó rồi thì chỉ cần ghi tên đầy đủ của tập tin là đủ.

Mở cửa sổ Command Prompt và gõ lệnh:

Code: Select all

vbc /target:library c:\class1.vb

Không phân biệt chữ hoa hay chữ thường.

Image

Kết quả nếu như biên dịch thành công:

Image

Tập tin DLL mới được biên dịch xong sẽ nằm cùng thư mục với tập tin cần biên dịch.

Image

3. Sử dụng:

Sau khi đã biên dịch xong thì bạn có thể sử dụng nó như bất cứ DLL nào mà bạn đã từng dùng.
Mình sẽ cắt (Cut) nó bỏ ngược trở lại cái Project lúc nãy.

Image

Nếu không còn dùng lớp Class1.vb nữa thì bạn có thể xóa nó ở cửa sổ Solution Explorer của Visual Studio.
Để dùng chỉ cần add nó vào cái Project bằng cách vào Menu Project -> Add Reference... (hoặc Click chuột phải vào tên Project bên Solution Explorer và chọn Add Reference...) và chọn...

Image

Bây giờ vào khung nhìn Solution Explorer nhấn nút Show All Files

Image

Và cái DLL mà mình vừa add nó sẽ hiện ở mục Reference

Image

Sử dụng nó tương tự như bao các lớp khác.

Image
Image
Image

4. Nói thêm:
Thường thì khi biên dịch sẽ gặp một số lỗi. Lỗi mà mình hay gặp nhất là:

Image

Lỗi trên là do không chỉ rõ đối tượng thuộc đang dùng thuộc lớp nào.
Khắc phục: Chỉ rõ đối tượng đó là lấy từ lớp nào.

Image

Hoặc

Image

Để biết đối tượng đó thuộc lớp nào thì bạn có thể vào Object Browser (View -> Object Browser (F2)) hoặc nhấn F12 khi bạn gõ xong tên đối tượng trong mã chương trình.

Image

Để sửa một số thông tin của DLL như là File Version, Product Name, Product Version, ... thì bạn có thể đúp chuột vào cái DLL đó vào Version ... và hãy chỉnh sửa những thông số mà bạn cho là cần thiết. Việc chỉnh sửa này không hề ảnh hưởng tới DLL. <= mục này bị mất hình nên không hướng dẫn chi tiết được.
#:-S

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 30/07/2010 10:20 am
by minhduc4477
Bạn ơi, Mình "Add Reference" một DLL nào đó, thì khi "Build" ứng dụng, VB tự động thêm vào thư mục Bin.
Vậy có thay đỗi được hok?

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 30/07/2010 7:15 pm
by lungocqua
Bạn muốn thay đổi gì ở cái DLL đó, bạn muốn thay đổi đường dẫn của nó hay là muốn bỏ nó thì chỉ cần xóa nó đi rồi hãy add lại.
Bây giờ vào khung nhìn Solution Explorer nhấn nút Show All Files

Tới đây cái DLL mà bạn đã Add nó sẽ hiện ra bạn có thể xóa nó đi rồi Add lại cái khác hoặc là Add lại chính nó với một đường dẫn khác. :)

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Sat 31/07/2010 7:26 am
by minhduc4477
Ý là thay đỗi cái đường dẫn mặt định của VB ak! Thay vì khi add vô nó nằm chung với thư mục của chương trình "Bin", mà thay nó bằng "Bin/Dll" chẵn hạn.

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Sat 31/07/2010 7:35 am
by lungocqua
Cái này thì mình không rõ lắm mặc định thì cái DLL đó nó sẽ nằm chung với thư mục có chứa tập tin exe của bạn. Mình chỉ có thể thay đổi được đường dẫn mà bạn lấy cái DLL đó thôi.

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 27/08/2010 4:00 pm
by thuongbat
Tạo DLL mà theo cách của bác chủ chắc các lập trình viên đến bỏ nghề luôn quá. Có Visual Studio, chỉ cần tạo Project kiểu Class Library là được rồi mà

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 27/08/2010 8:37 pm
by lungocqua
Hi! Mỗi người mỗi cách mà! :D
Mà nè! Bạn biết thì hướng dẫn cho mọi người cùng biết đi. Giấu nghề làm chi. :-/

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 27/08/2010 11:29 pm
by thuongbat
Có gì đâu mà giấu nghề. Mình cũng mới làm trên .NET được nửa năm nay thôi. Nhưng mình thiết nghĩ đây là 1 vấn đề cơ bản. MÌnh sẽ đưa ra 1 ví dụ về cách mình vẫn thường làm

I. Tạo Project kiểu Windows Application. Đây là Project chính, sẽ sử dụng cái DLL mình tạo ra sau này

+ Chạy VS2005, vào File > New Project
+ Chọn kiểu Project cần tạo là Windows Application. Đặt tên Project là WindowsApplication1
+ Nhấn Ok để xác nhận. Bạn sẽ có 1 project với 1 form mặc định là Form1.
windows-application1.JPG


II. Tạo DLL đây
+ Vẫn đang mở Project đã tạo ở bước 1, bạn vào menu File > Add > New Project
+ Chọn kiểu Project cần tạo là ClassLibrary. Đặt tên Project là KetNoiCSDL
+ Nhấn OK để xác nhận. Bạn sẽ có thêm 1 Project mới trong cửa sổ Solution Explorer như sau:
class-library1.JPG

+ Bắt đầu Code cho Class của bạn nào. Bạn có thể tạo DLL làm việc gì tuỳ thích. Ở đây mình ví dụ là 1 cái DLL dùng để kết nối với CSDL và thực thi 1 số câu lệnh. Code của mình như sau:

<file Class1.Vb>

  1. Imports System.Data
  2. Imports System.Data.SqlClient
  3.  
  4. Public Class Class1
  5.  
  6.     Dim _ConnectionString As String
  7.     'hàm tạo của lớp
  8.     Public Sub New(ByVal connectionString As String)
  9.         _ConnectionString = connectionString
  10.     End Sub
  11.     'thực thi 1 câu Sql kiểu INSERT, UPDATE, DELETE. trả về True nếu thực hiện thành công
  12.     'ngược lại thì trả về False
  13.     Public Function ExecuteNoneQuery(ByVal Sql As String) As Boolean
  14.         Dim cnxn As SqlConnection = New SqlConnection(_ConnectionString)
  15.         Dim cmd As SqlCommand = Nothing
  16.         Dim ret As Boolean = False
  17.         Try
  18.             cnxn.Open()
  19.             cmd = New SqlCommand(Sql, cnxn)
  20.             ret = (cmd.ExecuteNonQuery() > 0)
  21.         Catch ex As Exception
  22.             ret = False
  23.         Finally
  24.             If cnxn IsNot Nothing AndAlso cnxn.State = ConnectionState.Open Then cnxn.Close()
  25.         End Try
  26.         Return ret
  27.     End Function
  28.     'Thực thi 1 câu SQL kiểu SELECT. Trả về Datatable là dữ liệu đọc được từ CSDL
  29.     Public Function ExecuteQuery(ByVal Sql As String) As DataTable
  30.         Dim da As SqlDataAdapter = Nothing
  31.         Dim ds As DataSet = New DataSet()
  32.         Dim ret As DataTable = Nothing
  33.         Try
  34.             da = New SqlDataAdapter(Sql, _ConnectionString)
  35.             da.Fill(ds)
  36.             ret = ds.Tables(0)
  37.         Catch ex As Exception
  38.             ret = Nothing
  39.         Finally
  40.             If da IsNot Nothing Then da.Dispose()
  41.         End Try
  42.         Return ret
  43.     End Function
  44. End Class
  45.  


III. Sử dụng DLL như thế nào?
DLL được sử dụng vào ứng dụng WindowsApplication1 như sau.
+ Trên cửa sổ Solution Explorer, right Click vào WindowsApplication1, chọn Add Reference
addreference1.JPG

+ trên form mới hiện ra, chọn sang tab Projects. Chọn ProjectName là KetNoiCSDL (chính là cái Project DLL đã tạo ở bước 2) rồi nhấn OK
addreference2.JPG

+ Bắt đầu Code với DLL đã add vào nào
<file Form1.vb>

[vbnet]
'khai báo sử dụng DLL vừa tạo trong ứng dụng winform này
Imports KetNoiCSDL
Imports System.Data

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'khai báo chuỗi kết nối vào SqlServer của bạn
Dim connectionString As String = "Server=(local);Database=Test;UID=sa;pwd=123456"
'khai báo 1 bảng để nhận giá trị trả về
Dim dt As DataTable = Nothing
'khai báo một đối tượng thuộc kiểu Class1 trong DLL đã tạo
Dim objectDb As Class1 = New Class1(connectionString)
'lấy dữ liệu về
dt = objectDb.ExecuteQuery("SELECT * FROM Users")
'gán bảng dữ liệu lên DatagridView (nhớ kéo thả 1 cái datagridview lên form nhé)
DatagridView1.DataSource = dt
End Sub
End Class
[/vbnet]

Bây giờ bạn có thể F5 để chạy chương trình rồi. Sau khi chạy, bạn sẽ thấy trong thư mục Bin\Debug của Project WindowsApplication1 có 1 số file được tạo ra. Trong đó ta quan tâm chủ yếu là 2 file: WindowsApplication1.Exe (đây là file chạy của ta) và file KetNoiCSDL.dll (đây là file DLL VS2005 đã tạo ra cho ta).

Cách mà bác chủ thớt tạo DLL không có gì sai nhưng mà rất là rắc rối vì:
+ Phải sao chép file Class1.vb sang ổ đĩa gốc cho đường dẫn nó ngắn đi để đỡ bị sai khi gõ lệnh
+ Phải gõ 1 đống lệnh loằng ngoằng trong cửa sổ DOS. Nếu trong Class của bác mà có Import nhiều thư viện thì lệnh gõ sẽ còn dài nữa
+ Bác biên dịch file DLL bằng lệnh. Nếu Class của bác gặp lỗi thì Debug sẽ rất vất vả
+ Project Exe của bác sau đó sẽ Add Reference vào 1 file DLL. Điều đó đồng nghĩa với việc file DLL phải chứa các class hoàn chỉnh rồi. Nếu chưa hoàn chỉnh, khi cần thay đổi cái gì trong DLL bác lại phải code, copy, gõ lệnh trong dos và reference lại :-O

Đây là 1 số góp ý của mình. Có gì không phải mong các bạn bỏ qua

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Thu 09/09/2010 4:14 pm
by tungcan5diop
bạn thuongbat cho mình hỏi chút,trong 1 project của mình,gốm nhiếu Form và các Class,bây giờ mình muốn đóng gói các Class đó thành DLL thì chỉ còn cách là copy các Class đó vào trong 1 project mới(mỗi class là 1 project) thôi sao?
có cách nào khác không hả bạn,hiện tại thì mình gom chung các Class đó vào trong 1 Class và cho tất cả vào cùng 1 NameSpace,đóng gói Class đó lại,tóm lại là gom các Class chung trong 1 DLL,giả sử nếu ta muốn để các Class đó rời nhau và đóng gói thành nhiều DLL thì mỗi Class phải add thêm 1 project mới ah?

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 10/09/2010 8:32 am
by thuccads
Nhét tất cả cac class vào một project rồi Buil thôi bạn. Nếu C# thì phải khai báo đầy đủ namespace còn vb mà không khai thì nó tự hiểu trong một project là cùng namespace.

Re: Cách tạo và dùng DLL trong VB.Net

Posted: Fri 10/09/2010 8:32 am
by thuongbat
giả sử nếu ta muốn để các Class đó rời nhau và đóng gói thành nhiều DLL thì mỗi Class phải add thêm 1 project mới ah?

Đúng rồi bạn

Tuy nhiên bạn cũng nên xem xét cách phân chia các Class vào trong các file DLL khác nhau. Thường thì người ta sẽ gom nhiều Class có tính năng tương đương nhau vào 1 file DLL. Rất ít trường hợp 1 file DLL chỉ có 1 Class.
Bạn tham khảo link này: http://www.capesoft.com/Docs/MultiProj/mptutor.htm. Mình thấy đây là 1 bài viết rất hay về cách tạo ứng dụng có nhiều file DLL

Re: Cách tạo và dùng DLL trong VB.NET

Posted: Tue 09/08/2011 9:15 pm
by hungvu11
mình mới dùng visual basic 10, mà không hiểu sâu lăm nên muốn biết lỗi khi
tạo hàm "Sleep 1000" delay khoang 1s
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Khi khai bao trong visual basic 6 thi dùng được
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
trong visual basic 10 bị lỗi Stack ??

Re: Cách tạo và dùng DLL trong VB.NET

Posted: Tue 22/11/2011 11:14 pm
by botre137
Cái này hôm nay em vứa được học xong khi add fine dll vào vb.net thì chỉ cần gọi nó ra thôi nên chẳng ai biết thuật toán của mình cả

Re: Cách tạo và dùng DLL trong VB.NET

Posted: Sat 10/05/2014 11:37 pm
by orichuni
Bạn ơi mình có 2 file class như này mà biên dịch 1 file bị lỗi là sao ?

Re: Cách tạo và dùng DLL trong VB.NET

Posted: Sun 11/05/2014 8:17 pm
by OKMimo
Một thắc mắc quá chung chung. Lỗi của bạn như thế nào? Bạn hãy post cả project lên thì mới biết được. Hjx.

Re: Cách tạo và dùng DLL trong VB.NET

Posted: Wed 01/04/2020 1:13 pm
by NTN
Ảnh die hết rồi bạn ơi