Tạo Và Sử Dụng Thư Viện Liên Kết Động *.DLL (Windows API) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,538
Được thích
4,133
Giới tính
Nam
1/ Mình đang từng bước Nghiên cứu và tập Viết 1 thư viên liên kết động ( Standard DLL) khai báo gọi hàm kiểu Declare ... để khi copy vao bất cứ máy nào cũng có thể sử dụng tốt mà không cần phải đăng ký thư viên với Windows hay hệ điều hành khác vv...

2/ Mình úp lên đây nhờ các Bạn Test dùm trên các máy win32 , Office32, Win64, Office64 và nếu có hệ điều hành khác càng tốt ...và máy đó có cài office ...
Xem nó có chạy hay không ....nếu Lỗi Xin báo lỗi

3/ Code khai báo khi File Test.dll trong Folder D:\TestDLL\Test.dll Như sau:
PHP:
Private Declare Function Chuoi Lib "D:\TestDLL\Test.dll" (ByVal strValue As String) As String
  
Private Declare Function Cong Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
  
Private Declare Function Tru Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Private Declare Function Nhan Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Rem Code trong Module nay Chi su dung duoc Khi File [Test.dll] Copy dung Vao Duong Dan: D:\TestDLL\Test.dll
Rem ==========
Private Sub Test1()
    Dim xx As String
    Cells.ClearContents
    xx = "Kieu .........Manh"
    Range("A1") = Chuoi(xx)
End Sub
Rem ==========
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(2, 7)
End Sub
Rem ==========
Private Sub Test3()
    Cells.ClearContents
    Range("A3") = Tru(10, 7)
End Sub
Rem ==========
Private Sub Test4()
    Cells.ClearContents
    Range("A4") = Nhan(2, 2)
End Sub

4/ Code khai báo khi File Test.dll trong Folder C:\Windws\System32\Test.dll Như sau:
PHP:
Private Declare Function Chuoi Lib "Test.dll" (ByVal strValue As String) As String
  
Private Declare Function Cong Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
  
Private Declare Function Tru Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Private Declare Function Nhan Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Rem Code Trong Module nay chi su dung duoc Khi Copy File Test.dll Vào C:\Windows\System32\Test.dll
Rem ==========
Private Sub Test1()
    Dim xx As String
    Cells.ClearContents
    xx = "Kieu .........Manh"
    Range("A1") = Chuoi(xx)
End Sub
Rem ==========
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(2, 7)
End Sub
Rem ==========
Private Sub Test3()
    Cells.ClearContents
    Range("A3") = Tru(2, 7)
End Sub
Rem ==========
Private Sub Test4()
    Cells.ClearContents
    Range("A4") = Nhan(2, 2)
End Sub

Xin cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
1/ Mình đang từng bước Nghiên cứu và tập Viết 1 thư viên liên kết động ( Satndard DLL) khai báo gọi hàm kiểu Declare ... để khi copy vao bất cứ máy nào cũng có thể sử dụng tốt mà không cần phải đăng ký thư viên với Windows hay hệ điều hành khác vv...

2/ Mình úp lên đây nhờ các Bạn Test dùm trên các máy win32 , Office32, Win64, Office64 và nếu có hệ điều hành khác càng tốt ...và máy đó có cài office ...
Xem nó có chạy hay không ....nếu Lỗi Xin báo lỗi

3/ Code khai báo khi File Test.dll trong Folder D:\TestDLL\Test.dll Như sau:
PHP:
Private Declare Function Chuoi Lib "D:\TestDLL\Test.dll" (ByVal strValue As String) As String
 
Private Declare Function Cong Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
 
Private Declare Function Tru Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Private Declare Function Nhan Lib "D:\TestDLL\Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Rem Code trong Module nay Chi su dung duoc Khi File [Test.dll] Copy dung Vao Duong Dan: D:\TestDLL\Test.dll
Rem ==========
Private Sub Test1()
    Dim xx As String
    Cells.ClearContents
    xx = "Kieu .........Manh"
    Range("A1") = Chuoi(xx)
End Sub
Rem ==========
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(2, 7)
End Sub
Rem ==========
Private Sub Test3()
    Cells.ClearContents
    Range("A3") = Tru(10, 7)
End Sub
Rem ==========
Private Sub Test4()
    Cells.ClearContents
    Range("A4") = Nhan(2, 2)
End Sub

4/ Code khai báo khi File Test.dll trong Folder C:\Windws\System32\Test.dll Như sau:
PHP:
Private Declare Function Chuoi Lib "Test.dll" (ByVal strValue As String) As String
 
Private Declare Function Cong Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
 
Private Declare Function Tru Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Private Declare Function Nhan Lib "Test.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

Rem Code Trong Module nay chi su dung duoc Khi Copy File Test.dll Vào C:\Windows\System32\Test.dll
Rem ==========
Private Sub Test1()
    Dim xx As String
    Cells.ClearContents
    xx = "Kieu .........Manh"
    Range("A1") = Chuoi(xx)
End Sub
Rem ==========
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(2, 7)
End Sub
Rem ==========
Private Sub Test3()
    Cells.ClearContents
    Range("A3") = Tru(2, 7)
End Sub
Rem ==========
Private Sub Test4()
    Cells.ClearContents
    Range("A4") = Nhan(2, 2)
End Sub

Xin cảm ơn
Thử vầy là biết code ổn hay không liền:
Mã:
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(30000, 40000)
End Sub
Đã đóng gói thành DLL thì nhất định không được để lỗi đáng tiếc nào xảy ra
 
Upvote 0
Thử vầy là biết code ổn hay không liền:
Mã:
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(30000, 40000)
End Sub
Đã đóng gói thành DLL thì nhất định không được để lỗi đáng tiếc nào xảy ra
Cảm ơn Anh ...Em đang Nghiên cứu Và tập Viết Mà ....hehe
 
Upvote 0
Thử vầy là biết code ổn hay không liền:
Mã:
Private Sub Test2()
    Cells.ClearContents
    Range("A2") = Cong(30000, 40000)
End Sub
Đã đóng gói thành DLL thì nhất định không được để lỗi đáng tiếc nào xảy ra

Bị lỗi gì vậy bác?
Nhìn thì biết ngay là lỗi tràn số. Nhưng lỗi ra sao thì khong biết, vì máy làm việc của tôi không lắp các phần mềm ngoại.
Sở dĩ tôi hỏi lỗi gì là vì có hai loại lỗi:
1. lỗi khong tính được - cái này có thể châm chế, vì ngừoi dùng chỉ cần tránh đi
2. lỗi tính ra kết quả sai - cái này khong thể chấp nhận vì nếu đem làm thư viện, toi có một module cỡ ngàn dòng, gọi code này cỡ chục lần thì ông nội toi cũng khong debug nổi (sai chưa chắc đã nhận ra, nói chi debug)

Cảm ơn Anh ...Em đang Nghiên cứu Và tập Viết Mà ....hehe

Quy luật đầu tiên của viết code thư viện là test giới hạn - tiếng trong nghề gọi là boundary test.
Hàm tính toán integer thì tối thiểu phải test các giới hạn:
1. giới hạn 0
2. giới hạn âm
3. giới hạn tràn số (>= 32768)
 
Upvote 0
Tôi định không viết gì ở topic này nhưng sợ mất thời gian test của mọi người nên đành góp ý.

1. DLL của bạn dùng VB6 để tạo. Vậy là không hỗ trợ chuỗi unicode, không hỗ trợ trong môi trường 64-bit. Các bạn đang chạy Excel 64-bit thì khỏi test sẽ mất thời gian nhé.
2. Đừng dùng VB6, .NET để tạo DLL kiểu Standard DLL, nó không phải là chuẩn Standard DLL. Hai môi trường đó đều là môi trường thông dịch. nếu làm từ .NET thì máy của người dùng phải cài Framework.NET x.x. VB6 thì cũng thông dịch qua "MSVBVM60.DLL" và không unicode - Đây là đồ cổ, MS không còn phát triển nó nữa.

Nếu bạn chỉ biết về VB6, kể cả là dân chuyên gia thì cũng đừng nên đầu tư làm Standard DLL sẽ mất thời gian vô ích.
 
Upvote 0
Upvote 0
Lúc đầu em cũng định viết DLL bằng VB6 nhưng rõ ràng như anh Tuân nói, nó sẽ phá sản nếu sử dụng cho win 64bit.
 
Upvote 0
Lúc đầu em cũng định viết DLL bằng VB6 nhưng rõ ràng như anh Tuân nói, nó sẽ phá sản nếu sử dụng cho win 64bit.
sao Mình nhờ Tân chạy trên Win64 ...còn Office chưa hỏi ...Thấy ok mà ...Tối nay nhờ lại xem
Không biết có ai xài office64 nhờ test dùm...còn code lỗi tìm cách điều chỉnh sau vấn đề là có chạy được trên môi trường Win64 + Office64 ko cái đã
Xong Tính tiếp ...Nghiên cứu mà ...
 
Upvote 0
sao Mình nhờ Tân chạy trên Win64 ...còn Office chưa hỏi ...Thấy ok mà ...Tối nay nhờ lại xem
Không biết có ai xài office64 nhờ test dùm...còn code lỗi tìm cách điều chỉnh sau vấn đề là có chạy được trên môi trường Win64 + Office64 ko cái đã
Xong Tính tiếp ...Nghiên cứu mà ...
Anh kieu manh cần test gì gửi em làm cho (win 64 + excel 64). Hướng dẫn em làm từng bước nhá! ;)

64b.jpg
 
Upvote 0
Upvote 0
Tôi định không viết gì ở topic này nhưng sợ mất thời gian test của mọi người nên đành góp ý.

1. DLL của bạn dùng VB6 để tạo. Vậy là không hỗ trợ chuỗi unicode, không hỗ trợ trong môi trường 64-bit. Các bạn đang chạy Excel 64-bit thì khỏi test sẽ mất thời gian nhé.
2. Đừng dùng VB6, .NET để tạo DLL kiểu Standard DLL, nó không phải là chuẩn Standard DLL. Hai môi trường đó đều là môi trường thông dịch. nếu làm từ .NET thì máy của người dùng phải cài Framework.NET x.x. VB6 thì cũng thông dịch qua "MSVBVM60.DLL" và không unicode - Đây là đồ cổ, MS không còn phát triển nó nữa.

Nếu bạn chỉ biết về VB6, kể cả là dân chuyên gia thì cũng đừng nên đầu tư làm Standard DLL sẽ mất thời gian vô ích.

Thực ra chương trình dll anh viết vẫn hoạt động được trong 64bit. Nhưng chạy rất phập phù, có máy ăn ngay, có máy báo lỗi có giời mới hiểu.
 
Upvote 0
Tôi đã nói rõ như ban ngày rồi mà các chuyên gia vẫn đâm đầu test cho biết à? Khổ các bác quá :D
 
Upvote 0
Thực ra chương trình dll anh viết vẫn hoạt động được trong 64bit. Nhưng chạy rất phập phù, có máy ăn ngay, có máy báo lỗi có giời mới hiểu.
Bác vẫn không hiểu bản chất môi trường 32 và 64 bit. Exe thì chạy cả 32 và 64 bit. Còn dll thì phải chạy trong Exe, nếu Exe 64 thì nó chỉ gọi dll loại 64 bit nhé (phải đồng bộ). VB6 thì chỉ đẻ ra được đứa con 32 bít nhé. DNeen mới kết luận là PHÁ SẢN!
 
Upvote 0
Bác vẫn không hiểu bản chất môi trường 32 và 64 bit. Exe thì chạy cả 32 và 64 bit. Còn dll thì phải chạy trong Exe, nếu Exe 64 thì nó chỉ gọi dll loại 64 bit nhé (phải đồng bộ). VB6 thì chỉ đẻ ra được đứa con 32 bít nhé. DNeen mới kết luận là PHÁ SẢN!

Anh cài nhiều bộ trên Excel 2013, 2016 chạy dll trong Window 64bit mà. Hiện đang dùng Office 2106 32bit. Phần nhiều được và số ít báo lỗi (có thể do Office 64 bit).

Anh có Bản SP6 không cho Mạnh xin với

Đây nhé:

https://www.microsoft.com/en-us/download/details.aspx?id=5721

https://www.microsoft.com/en-us/download/details.aspx?id=7030
 
Lần chỉnh sửa cuối:
Upvote 0
Anh cài nhiều bộ trên Excel 2013, 2016 chạy dll trong Window 64bit mà. Phần nhiều được và số ít báo lỗi.

Anh phải phân biệt Exe hay Excel của anh là 32 hay 64 bít nhé, DLL KHÔNG LIÊN QUAN ĐẾN WINDOWS MÀ LIÊN QUAN ĐẾN ỨNG DỤNG(exe) GỌI NÓ.
Nếu anh mà dùng dll tạo ra từ 32 bit (VB6) mà chạy đc trong Excel 64 bit thì anh là người duy nhất trên thế giới làm được đấy. Anh viết sách vba và cả GPE đang bán sách nên anh phải thận trọng khi kết luận vấn đề kẻo nhiều người tin theo là cùng phá sản đấy :p

SP6 hay SP100 thì chỉ là bản vá lỗi chứ không thay đổi trình biên dịch.
 
Upvote 0
Anh phải phân biệt Exe hay Excel của anh là 32 hay 64 bít nhé, DLL KHÔNG LIÊN QUAN ĐẾN WINDOWS MÀ LIÊN QUAN ĐẾN ỨNG DỤNG(exe) GỌI NÓ.
Nếu anh mà dùng dll tạo ra từ 32 bit (VB6) mà chạy đc trong Excel 64 bit thì anh là người duy nhất trên thế giới làm được đấy. Anh viết sách vba và cả GPE đang bán sách nên anh phải thận trọng khi kết luận vấn đề kẻo nhiều người tin theo là cùng phá sản đấy :p

SP6 hay SP100 thì chỉ là bản vá lỗi chứ không thay đổi trình biên dịch.

Chú đọc lại bài anh đã edit nhé.
 
Upvote 0
Thực ra chương trình dll anh viết vẫn hoạt động được trong 64bit. Nhưng chạy rất phập phù, có máy ăn ngay, có máy báo lỗi có giời mới hiểu.

Câu này anh khẳng định chạy được trong 64 bit nhưng phập phù, anh ghi rõ đó là Windows 64 bít chứ không phải Excel 32 bit nhé.
 
Upvote 0
đang tìm kiếm 1 bản Delphi cài nghiên cứu mà mò hoài ko có key ... :D
bạn nào có cho xin một bản
 
Upvote 0
đang tìm kiếm 1 bản Delphi cài nghiên cứu mà mò hoài ko có key ... :D
bạn nào có cho xin một bản
bài này đã vi phạm nội quy diễn đàn nhé anh.
I. Quy định về nội dung
  1. 7. Không gửi các bài có nội dung xin crack, serial, chương trình hack, bomb mail, virus, trộm password... Có quyền gửi các bài học, thảo luận, trao đổi kinh nghiệm về Program, Security (hack, crack), nhưng không được hướng dẫn trực tiếp cách xâm nhập một hệ thống cụ thể nào hoặc bẻ khóa một phần mềm nào.
 
Upvote 0
bài này đã vi phạm nội quy diễn đàn nhé anh.
I. Quy định về nội dung
  1. 7. Không gửi các bài có nội dung xin crack, serial, chương trình hack, bomb mail, virus, trộm password... Có quyền gửi các bài học, thảo luận, trao đổi kinh nghiệm về Program, Security (hack, crack), nhưng không được hướng dẫn trực tiếp cách xâm nhập một hệ thống cụ thể nào hoặc bẻ khóa một phần mềm nào.
ok xin key mà ....đâu có phá đâu...
Key là nhập vào xài thôi như key Office hay Windows ý ...biết mà
 
Upvote 0
để giải quyết Win64 - Office 64 xài như hình là OK ...
 

File đính kèm

  • mm.PNG
    mm.PNG
    88.8 KB · Đọc: 45
Lần chỉnh sửa cuối:
Upvote 0
nhờ befaint test dùm Mạnh ...cách test nhu Bài 1 nếu Office64 thêm PtrSafe

Mạnh Viết = Delphi XE7 đó
Xin cảm ơn
Mã:
Public xx As Long
Private Declare Function LinkTinh Lib "D:\Debug\Test.dll" (ByVal a As Double) As Double

Sub TestXX()
    xx = xx + 1
    Range("A1") = xx
    Range("A2") = LinkTinh(Range("A1"))
End Sub
 

File đính kèm

Upvote 0
nhờ befaint test dùm Mạnh ...cách test nhu Bài 1 nếu Office64 thêm PtrSafe

Mạnh Viết = Delphi XE7 đó
Xin cảm ơn
Mã:
Public xx As Long
Private Declare Function LinkTinh Lib "D:\Debug\Test.dll" (ByVal a As Double) As Double

Sub TestXX()
    xx = xx + 1
    Range("A1") = xx
    Range("A2") = LinkTinh(Range("A1"))
End Sub
Kết quả đây anh Mạnh.

T0.jpg
T1.jpg
T2.jpg
 
Upvote 0
Làm phiền befaint test dùm cho Mạnh lần cuối này nữa xem sao ...
File Manh.dll Trong Folder test\Manh.dll .....neu copy qua cho khác nhớ thay đổi lài đường dẫn dùm Còn Copy vào System32 thì thôi
xin cảm Ơn
 

File đính kèm

Upvote 0
nó thiếu cái gì ta ...toàn chết với Office_x64 .... còn lại ok ... vấn đề là thời gian Mạnh sẻ chinh phục nó ...

Thử Winx32 + Officex32 code file thư viên thấy chạy rất nhanh và xài hàm trực tiếp trên Cells ok như binh thường...

rãnh thời gian sẻ nghiên cứu từng bước 1 ....

thấy hay ....và cũng là một hướng nghiên cứu tốt phù hợp với sự phát triển của công nghệ

cảm ơn Bạn
 
Upvote 0
Thử Winx32 + Officex32 code file thư viên thấy chạy rất nhanh và xài hàm trực tiếp trên Cells ok như binh thường...

Code dll là code đã được dịch ra mã máy rồi. Đương nhiên nhanh hơn VBA vừa chạy vừa dịch.
(trừ phi bạn dùng loại mã chạy trên nền ảo, như CLR chạy trên Dot Net)
 
Upvote 0
Code dll là code đã được dịch ra mã máy rồi. Đương nhiên nhanh hơn VBA vừa chạy vừa dịch.
(trừ phi bạn dùng loại mã chạy trên nền ảo, như CLR chạy trên Dot Net)
Cảm ơn Bạn ... Còn kẹt 1 cái trên Office_x64 ...nếu bạn biết xin chỉ dùm
 
Upvote 0
Tôi khong sử dụng VB6 cho nên khong biết cách build mấy cái này. Bạn Tuân chắc chắn biết nhiều hơn tôi.
 
Upvote 0
Code dll là code đã được dịch ra mã máy rồi. Đương nhiên nhanh hơn VBA vừa chạy vừa dịch.
(trừ phi bạn dùng loại mã chạy trên nền ảo, như CLR chạy trên Dot Net)
Đến bây giờ mình mới hiểu cũng là File *.dll mà có 2 dạng
1 là ActiveX dll và 2 là Standard DLL .... còn hiểu sâu tại sao thì thua .... :D
 
Lần chỉnh sửa cuối:
Upvote 0
File ở Bài 1 viết = VB6 ....còn mấy File cuối này Viết = Delphi 7

Muốn tạo các tính chất của một dll, bạn phải dựa vào builder. Trong lúc build, builder cho phép bạn tuỳ chọn một số điều kiện để có thể ra 32/64 hay cả hai.
VB6 là của MS. Như vậy builder của nó là của MS. Có thể chỉ cần patch thêm mấy cái dll cho phép build office tools.
Delphi là tiêu chuẩn chung. Builder của nó chưa chắc của MS. Bạn phải tìm ngừoi nào đã build thành công rồi mà hỏi.

tb. bạn đã chỉnh xong cái vụ tràn số chưa?
 
Upvote 0
Muốn tạo các tính chất của một dll, bạn phải dựa vào builder. Trong lúc build, builder cho phép bạn tuỳ chọn một số điều kiện để có thể ra 32/64 hay cả hai.
VB6 là của MS. Như vậy builder của nó là của MS. Có thể chỉ cần patch thêm mấy cái dll cho phép build office tools.
Delphi là tiêu chuẩn chung. Builder của nó chưa chắc của MS. Bạn phải tìm ngừoi nào đã build thành công rồi mà hỏi.

tb. bạn đã chỉnh xong cái vụ tràn số chưa?
Cảm ơn bạn chưa chỉnh vụ tràn số ...
đang nghiên cứu cách viết làm sao sử dụng được cái đã ...xong mới nghiên cứu tiếp cái đó
Tự mò học mà ...mò từng cái 1 biết sao đậy .... ai biết cái nào chỉ thêm thì tốt cái đó
 
Upvote 0
1/ Code ở bài 1 lỗi .... Anh Ndu nêu ở Bài 2 & 4 đó là do tạo trên VB6 ... và được trả lời ờ bài 7 là hoàn toàn chính xác ...có lẻ vb6 quá lỗi thời

2/ Còn Vụ Bạn VetMini có nêu tràn số không phải do code mà do Tools để tạo ra nó ...

3/ Mình mới thử Viết lai trên Delphi 7 xử lý được hết các lỗi trên

4/ Chỉ chạy trên Windows_x32 ,Office32, Và Win64 + Office32

5/ Mình Có tìm hiểu trên Internet thấy hầu hết người ta Viết một số ứng dụng trên Delphi cũng có 2 phiên Bản x32 & x64 chưa thấy ai viết 1 ứng dụng chạy ok trên 2 nên tảng đó = Dlephi mà có liên Quan tới Office_x32 và Office_x64

6/ Mạnh thấy Add-ins Atools cũng có bản x32 & x64 ....Nếu Mình nói sai ...Thành thật xin Lỗi vì có nêu Atools ở đây

Nhờ các Bạn test dùm .... sẻ lỗi với Office_x64

xin cảm ơn
 

File đính kèm

Upvote 0
5/ Mình Có tìm hiểu trên Internet thấy hầu hết người ta Viết một số ứng dụng trên Delphi cũng có 2 phiên Bản x32 & x64 chưa thấy ai viết 1 ứng dụng chạy ok trên 2 nên tảng đó = Dlephi mà có liên Quan tới Office_x32 và Office_x64

6/ Mạnh thấy Add-ins Atools cũng có bản x32 & x64 ....Nếu Mình nói sai ...Thành thật xin Lỗi vì có nêu Atools ở đây

Nhờ các Bạn test dùm .... sẻ lỗi với Office_x64

xin cảm ơn

Đúng rồi. Ứng dụng tạo ra không thể vừa 32 vừa 64 bit. Bộ Office từ 2010 của MS cũng 2 bản cài đặt rõ ràng, Add-in A-Tools cũng thế (vì nó phụ thuộc Office). Viết DLL buộc phải tạo theo ứng dụng mẹ (ứng dụng gọi nó), nếu bạn tạo chương trình chạy độc lập mà không can thiệp nhiều bộ nhớ thì 32 bit là cho tất cả các Windows.
DLL có 2 lại: Standard DLL thì không cần đăng ký vào Registry, mục đich cung cấp và chạy các hàm cho ứng dụng mẹ. Windows bản thân nó chạy đc là dùng nhiều hàn API ở các thư viện user32.dll, gdi32.dll, winsock.dll.,,, Đặc biệt loại thư viện này không cung cấp đối tượng COM/Class.
Loại DLL thứ 2 là ActiveX DLL là để tạo các đối tượng COM/Class, lập trình đối tượng như làm Class trong VB6, tuy nhiên lập trình trong Delphi hay hơn nhiều, thừa kế đối tượng rất rõ ràng, loại thư viện này muốn sử dụng được thì phải đăng ký vào Registry (phải cài đặt), nó cũng cho phép tạo các hàm kiểu API giống như Standard DLL, nếu chỉ cần dùng các hàm API này thì không cần đăng ký Registry, còn nếu dùng Class thì bắt buộc. Add-in A-Tools cung cấp một DLL nhưng có 2 tính chất ActiveX và Standard DLL, cho phép người lập trình viết code tương tác vào các Class của nó. (Ví dụ này tạo COM,Class BSConnection để lập trình kết nối CSDL
)
Trong Office sử dụng thư viện, đối tượng bổ sung là FM20.dll , chính là đẻ tạo Userform, các controls trên nó, đó là ActiveX DLL. Loại DLL này tạo phức tạp hơn loại Standard rất nhiều, không dễ như VB6.

Lập trình DLL là dần dần bạn sẽ phải hiểu biết về hệ thống Windows, cơ chế gọi thư viện ở các môi trường, bạn phải debug nhiều ở các môi trường như Windows gì? Office gì? Thời gian bạn phải bỏ ra nghiên cứu gấp 100 lần học VBA nhưng nếu thành công thì bạn đã ở tầm hiểu biết rộng lắm rồi, VBA chỉ là một lĩnh vực lập trình và ứng dụng rất nhỏ và hạn chế trong thế giới ứng dụng của Windows mà thôi.
 
Upvote 0
Đúng rồi. Ứng dụng tạo ra không thể vừa 32 vừa 64 bit. Bộ Office từ 2010 của MS cũng 2 bản cài đặt rõ ràng, Add-in A-Tools cũng thế (vì nó phụ thuộc Office). Viết DLL buộc phải tạo theo ứng dụng mẹ (ứng dụng gọi nó), nếu bạn tạo chương trình chạy độc lập mà không can thiệp nhiều bộ nhớ thì 32 bit là cho tất cả các Windows.
DLL có 2 lại: Standard DLL thì không cần đăng ký vào Registry, mục đich cung cấp và chạy các hàm cho ứng dụng mẹ. Windows bản thân nó chạy đc là dùng nhiều hàn API ở các thư viện user32.dll, gdi32.dll, winsock.dll.,,, Đặc biệt loại thư viện này không cung cấp đối tượng COM/Class.
Loại DLL thứ 2 là ActiveX DLL là để tạo các đối tượng COM/Class, lập trình đối tượng như làm Class trong VB6, tuy nhiên lập trình trong Delphi hay hơn nhiều, thừa kế đối tượng rất rõ ràng, loại thư viện này muốn sử dụng được thì phải đăng ký vào Registry (phải cài đặt), nó cũng cho phép tạo các hàm kiểu API giống như Standard DLL, nếu chỉ cần dùng các hàm API này thì không cần đăng ký Registry, còn nếu dùng Class thì bắt buộc. Add-in A-Tools cung cấp một DLL nhưng có 2 tính chất ActiveX và Standard DLL, cho phép người lập trình viết code tương tác vào các Class của nó. (Ví dụ này tạo COM,Class BSConnection để lập trình kết nối CSDL
)
Trong Office sử dụng thư viện, đối tượng bổ sung là FM20.dll , chính là đẻ tạo Userform, các controls trên nó, đó là ActiveX DLL. Loại DLL này tạo phức tạp hơn loại Standard rất nhiều, không dễ như VB6.

Lập trình DLL là dần dần bạn sẽ phải hiểu biết về hệ thống Windows, cơ chế gọi thư viện ở các môi trường, bạn phải debug nhiều ở các môi trường như Windows gì? Office gì? Thời gian bạn phải bỏ ra nghiên cứu gấp 100 lần học VBA nhưng nếu thành công thì bạn đã ở tầm hiểu biết rộng lắm rồi, VBA chỉ là một lĩnh vực lập trình và ứng dụng rất nhỏ và hạn chế trong thế giới ứng dụng của Windows mà thôi.
1/ Mình có coi trên mạng thấy có mấy Bản Delphi ...Ver 7.0, ... Ver 7.2, và Bản Delphi 7.3.4.3_Lite Edition điều rất nhẹ có mấy trăm MB ...Nhưng không hổ trợ Unicode

2/ Còn bản XE7 và XE8 có hổ trợ Unicode nhưng quá nặng bản XE7 file *.ISO trên 5G , Bản XE8 File *.ISO trên 7G ...khi cài vào máy nó ra khoãng gần 10G lận

3/ Mình biết bạn đang sử dụng Bản Delphi 7 để viết Add-Ins Atools .... Vậy nếu được bạn cho mình hỏi là: bằng cách gì bạn có thể sử dụng được Unicode trong Delphi 7 ....phải chăng phải sử dụng hàm để chuyên đổi Unicode Như VB6 hay Add-ins nào đó ...hay Tạo File *.pas Và *.res để sử dung Unicode

4/ Với một người mới tập làm quen với Delphi như mình xài Bản Delphi 7.3.4.3_Lite Edition là quá tốt (chưa cần thiết đến mấy bản XE)
nếu rành Delphi7 là có thể viết đủ thứ ....nhưng đang kẹt Unicode ....nếu được mong Bạn chỉ dùm làm sao để sử dụng được Unicode trong Delphi7

Xin cảm ơn
 
Upvote 0
1/ Mình có coi trên mạng thấy có mấy Bản Delphi ...Ver 7.0, ... Ver 7.2, và Bản Delphi 7.3.4.3_Lite Edition điều rất nhẹ có mấy trăm MB ...Nhưng không hổ trợ Unicode

2/ Còn bản XE7 và XE8 có hổ trợ Unicode nhưng quá nặng bản XE7 file *.ISO trên 5G , Bản XE8 File *.ISO trên 7G ...khi cài vào máy nó ra khoãng gần 10G lận

3/ Mình biết bạn đang sử dụng Bản Delphi 7 để viết Add-Ins Atools .... Vậy nếu được bạn cho mình hỏi là: bằng cách gì bạn có thể sử dụng được Unicode trong Delphi 7 ....phải chăng phải sử dụng hàm để chuyên đổi Unicode Như VB6 hay Add-ins nào đó ...hay Tạo File *.pas Và *.res để sử dung Unicode

4/ Với một người mới tập làm quen với Delphi như mình xài Bản Delphi 7.3.4.3_Lite Edition là quá tốt (chưa cần thiết đến mấy bản XE)
nếu rành Delphi7 là có thể viết đủ thứ ....nhưng đang kẹt Unicode ....nếu được mong Bạn chỉ dùm làm sao để sử dụng được Unicode trong Delphi7

Xin cảm ơn

Delphi chỉ hỗ trợ Unicode chính thống từ bản Delphi9 (bản này cũng rất nhẹ. Delphi7 là chạy nhẹ và ngon nhất, nếu chỉ để viết ứng dụng nhỏ, không unicode và để học tập thì là đủ.

Tôi viết Add-in A-Tools bằng Delphi từ khi thời phiên bản Delphi7, nhưng tôi viết hỗ trợ unicode. Cách làm như sau:
=> Với ký tự và chuỗi:
+ Với kiểu ký tự, bạn phải thay Char -> WideChar (Char là AnsiChar không hỗ trợ unicode)
+ Với kiểu con trỏ ký tự, bạn phải thay PChar -> PWideChar hoặc PWChar
+ Với kiểu chuỗi, bạn phải thay String , ShortString-> WideString (String là AnsiString, ShortString thực chất là AnsiString[255] đều không hỗ trợ unicode)
(*) Trong Delphi có kiểu dữ liệu OleVariant giống Variant của VB6/VBA nên cũng lưu được unicode nhé.

=> Với Form bạn cần cài component TntUnicode (bạn cần học cách cài các package vì trongDelphi việc tích hợp các mã bên ngoài là rất cần thiết để mở rộng ứng dụng) .

Nếu bạn dùng Delphi7 để viết form và hàm với chuỗi unicode thì bạn sẽ hiểu bản chất về 2 loại chuỗi trong Windows. Còn nếu bạn ngại tìm hiểu sâu mà muốn làm unicode một cách nghiễm nhiên thì tôi khuyến khích bạn cài Delphi9.

Sau này làm ngon rồi, đầu tư con máy RAM, CHIP, HDD tốt thì cài Delphi mới nhất hiện nay là 10.2 chiếm dung lượng ổ cứng tấm 20 GB :D.
 
Upvote 0
Delphi chỉ hỗ trợ Unicode chính thống từ bản Delphi9 (bản này cũng rất nhẹ. Delphi7 là chạy nhẹ và ngon nhất, nếu chỉ để viết ứng dụng nhỏ, không unicode và để học tập thì là đủ.

Tôi viết Add-in A-Tools bằng Delphi từ khi thời phiên bản Delphi7, nhưng tôi viết hỗ trợ unicode. Cách làm như sau:
=> Với ký tự và chuỗi:
+ Với kiểu ký tự, bạn phải thay Char -> WideChar (Char là AnsiChar không hỗ trợ unicode)
+ Với kiểu con trỏ ký tự, bạn phải thay PChar -> PWideChar hoặc PWChar
+ Với kiểu chuỗi, bạn phải thay String , ShortString-> WideString (String là AnsiString, ShortString thực chất là AnsiString[255] đều không hỗ trợ unicode)
(*) Trong Delphi có kiểu dữ liệu OleVariant giống Variant của VB6/VBA nên cũng lưu được unicode nhé.

=> Với Form bạn cần cài component TntUnicode (bạn cần học cách cài các package vì trongDelphi việc tích hợp các mã bên ngoài là rất cần thiết để mở rộng ứng dụng) .

Nếu bạn dùng Delphi7 để viết form và hàm với chuỗi unicode thì bạn sẽ hiểu bản chất về 2 loại chuỗi trong Windows. Còn nếu bạn ngại tìm hiểu sâu mà muốn làm unicode một cách nghiễm nhiên thì tôi khuyến khích bạn cài Delphi9.

Sau này làm ngon rồi, đầu tư con máy RAM, CHIP, HDD tốt thì cài Delphi mới nhất hiện nay là 10.2 chiếm dung lượng ổ cứng tấm 20 GB :D.
Cảm ơn bạn vậy là quá tốt rồi ... Mình sẻ xài Delphi 7 khi nào tốt rồi xài bản XE cũng không sao
Hôm rồi cài bản XE8 thấy viết Unicode trực tiếp luôn rất tốt ...nhưng nặng quá nó chiếm hơn 10G ....ổ cứng ... từng bước nghiên cứu và học tập mà
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom