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

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,421
Được thích
4,035
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

  • TestDLL.rar
    15.6 KB · Đọc: 23
Lần chỉnh sửa cuối:
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: 44
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

  • Debug.rar
    894.2 KB · Đọc: 8
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

  • test.rar
    50.3 KB · Đọc: 10
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
Web KT
Back
Top Bottom