Thông tin
  • Đánh dấu xác nhận câu hỏi đã được giải quyết để giúp diễn đàn nâng cao chất lượng [cách sử dụng]
  • Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết [nội qui]
  • Tìm kiếm trước khi đặt câu hỏi

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

Các bài viết hướng dẫn về Visual Basic .NET và C#

Các điều hành viên: QUANITGROBEST, tungcan5diop

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

Gửi bàigửi bởi lungocqua » Thứ 2 26/07/2010 8:15 am

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.

Hình ảnh

Hình ảnh
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

Hình ảnh

*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ỏ:

Hình ảnh
Syntax: [ Download ] [ Hide ]
Using vb.net Syntax Highlighting
  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
Parsed in 0.016 seconds, using GeSHi 1.0.8.11


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ì.

Hình ảnh

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

Hình ảnh

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

Hình ảnh

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

Hình ảnh

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:

Mã: Chọn tất cả
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:
Mã: Chọn tất cả
vbc /target:library c:\class1.vb

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

Hình ảnh

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

Hình ảnh

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.

Hình ảnh

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.

Hình ảnh

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...

Hình ảnh

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

Hình ảnh

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

Hình ảnh

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

Hình ảnh
Hình ảnh
Hình ảnh

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à:

Hình ảnh

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.

Hình ảnh

Hoặc

Hình ảnh

Để 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.

Hình ảnh

Để 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
Đánh giá chủ đề: Evaluations: 0, 0.00 on the average.Evaluations: 0, 0.00 on the average.Evaluations: 0, 0.00 on the average.Evaluations: 0, 0.00 on the average.Evaluations: 0, 0.00 on the average.Evaluations: 0, 0.00 on the average.
Thanks lungocqua for your sharing!
Sửa lần cuối bởi lungocqua vào ngày Chủ nhật 23/01/2011 10:12 am với 1 lần sửa trong tổng số.
Ta đã trở lại và quên hết tất cả! :D
Hình đại diện của thành viên
lungocqua
Guru
Guru
 
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Đã cảm ơn: 0 lần
Được cảm ơn: 5 lần

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

Gửi bàigửi bởi minhduc4477 » Thứ 6 30/07/2010 10:20 am

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?
Tình yêu là vĩnh cữu, chỉ có người tình là thay đỗi.
Hình đại diện của thành viên
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 94
Ngày tham gia: Thứ 6 11/12/2009 2:15 pm
Đã cảm ơn: 0 lần
Được cảm ơn: 1 lần

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

Gửi bàigửi bởi lungocqua » Thứ 6 30/07/2010 7:15 pm

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. :)
Ta đã trở lại và quên hết tất cả! :D
Hình đại diện của thành viên
lungocqua
Guru
Guru
 
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Đã cảm ơn: 0 lần
Được cảm ơn: 5 lần

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

Gửi bàigửi bởi minhduc4477 » Thứ 7 31/07/2010 7:26 am

Ý 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.
Tình yêu là vĩnh cữu, chỉ có người tình là thay đỗi.
Hình đại diện của thành viên
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
 
Bài viết: 94
Ngày tham gia: Thứ 6 11/12/2009 2:15 pm
Đã cảm ơn: 0 lần
Được cảm ơn: 1 lần

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

Gửi bàigửi bởi lungocqua » Thứ 7 31/07/2010 7:35 am

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.
Ta đã trở lại và quên hết tất cả! :D
Hình đại diện của thành viên
lungocqua
Guru
Guru
 
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Đã cảm ơn: 0 lần
Được cảm ơn: 5 lần

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

Gửi bàigửi bởi thuongbat » Thứ 6 27/08/2010 4:00 pm

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à
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.
Hình đại diện của thành viên
thuongbat
Guru
Guru
 
Bài viết: 345
Ngày tham gia: Chủ nhật 27/04/2008 10:11 am
Đã cảm ơn: 4 lần
Được cảm ơn: 78 lần

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

Gửi bàigửi bởi lungocqua » Thứ 6 27/08/2010 8:37 pm

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. :-/
Ta đã trở lại và quên hết tất cả! :D
Hình đại diện của thành viên
lungocqua
Guru
Guru
 
Bài viết: 1225
Ngày tham gia: Thứ 3 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Đã cảm ơn: 0 lần
Được cảm ơn: 5 lần

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

Gửi bàigửi bởi thuongbat » Thứ 6 27/08/2010 11:29 pm

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>

Syntax: [ Download ] [ Hide ]
Using vb.net Syntax Highlighting
  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.  
Parsed in 0.016 seconds, using GeSHi 1.0.8.11


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>

Syntax: [ Download ] [ Hide ]
Using vb.net Syntax Highlighting
  1. 'khai báo sử dụng DLL vừa tạo trong ứng dụng winform này
  2. Imports KetNoiCSDL
  3. Imports System.Data
  4.  
  5. Public Class Form1
  6.  
  7.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.         'khai báo chuỗi kết nối vào SqlServer của bạn
  9.         Dim connectionString As String = "Server=(local);Database=Test;UID=sa;pwd=123456"
  10.         'khai báo 1 bảng để nhận giá trị trả về
  11.         Dim dt As DataTable = Nothing
  12.         'khai báo một đối tượng thuộc kiểu Class1 trong DLL đã tạo
  13.         Dim objectDb As Class1 = New Class1(connectionString)
  14.         'lấy dữ liệu về
  15.         dt = objectDb.ExecuteQuery("SELECT * FROM Users")
  16.         'gán bảng dữ liệu lên DatagridView (nhớ kéo thả 1 cái datagridview lên form nhé)
  17.         DatagridView1.DataSource = dt
  18.     End Sub
  19. End Class
  20.  
Parsed in 0.016 seconds, using GeSHi 1.0.8.11


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
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.
Hình đại diện của thành viên
thuongbat
Guru
Guru
 
Bài viết: 345
Ngày tham gia: Chủ nhật 27/04/2008 10:11 am
Đã cảm ơn: 4 lần
Được cảm ơn: 78 lần

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

Gửi bàigửi bởi tungcan5diop » Thứ 5 09/09/2010 4:14 pm

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?
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!
Hình đại diện của thành viên
tungcan5diop
Cựu chiến binh
Cựu chiến binh
 
Bài viết: 1124
Ngày tham gia: Thứ 4 24/09/2008 4:04 pm
Đến từ: TPHCM
Đã cảm ơn: 1 lần
Được cảm ơn: 28 lần

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

Gửi bàigửi bởi thuccads » Thứ 6 10/09/2010 8:32 am

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.
Hình đại diện của thành viên
thuccads
Thành viên tích cực
Thành viên tích cực
 
Bài viết: 143
Ngày tham gia: Thứ 2 01/02/2010 8:35 am
Đến từ: Hà Nội--->Sài Gòn
Đã cảm ơn: 0 lần
Được cảm ơn: 1 lần

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

Gửi bàigửi bởi thuongbat » Thứ 6 10/09/2010 8:32 am

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
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.
Hình đại diện của thành viên
thuongbat
Guru
Guru
 
Bài viết: 345
Ngày tham gia: Chủ nhật 27/04/2008 10:11 am
Đã cảm ơn: 4 lần
Được cảm ơn: 78 lần

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

Gửi bàigửi bởi hungvu11 » Thứ 3 09/08/2011 9:15 pm

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 ??
hungvu11
 
Bài viết: 1
Ngày tham gia: Thứ 3 09/08/2011 12:41 pm
Đã cảm ơn: 0 lần
Được cảm ơn: 0 lần

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

Gửi bàigửi bởi botre137 » Thứ 3 22/11/2011 11:14 pm

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ả
botre137
Thành viên chính thức
Thành viên chính thức
 
Bài viết: 15
Ngày tham gia: Thứ 6 04/03/2011 10:19 pm
Đến từ: thanh hoa
Đã cảm ơn: 2 lần
Được cảm ơn: 5 lần

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

Gửi bàigửi bởi orichuni » Thứ 7 10/05/2014 11:37 pm

Bạn ơi mình có 2 file class như này mà biên dịch 1 file bị lỗi là sao ?
Tập tin đính kèm
BS.rar
file class đây
(2.89 KiB) Đã tải về 7 lần
orichuni
 
Bài viết: 1
Ngày tham gia: Thứ 7 10/05/2014 10:43 pm
Đã cảm ơn: 0 lần
Được cảm ơn: 0 lần

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

Gửi bàigửi bởi OKMimo » Chủ nhật 11/05/2014 8:17 pm

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.
OKMimo
Thành viên tâm huyết
Thành viên tâm huyết
 
Bài viết: 459
Ngày tham gia: Thứ 6 11/02/2011 3:36 pm
Đã cảm ơn: 103 lần
Được cảm ơn: 54 lần


Quay về [.NET] Bài viết hướng dẫn

Ai đang trực tuyến?

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến0 khách