Giúp chuyển CODE vba sang Dll

Liên hệ QC

Covid19pro

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
21/12/20
Bài viết
6
Được thích
2
Chào mọi người . CHo mình hỏi phương thức viết code như code bên dưới là dùng cách nào. Xuất tất cả VBA qua DLL sau đó trong VBA gọi lại các code trong Dll. Mình cần viết như thế này cho mình hỏi phải dùng VBA hay C++ hay dùng 1 tool gì . Do mình có code VBA sẳng giờ phải dùng cách nào để chuyển qua dạng này nhanh nhất. XIn chân thành cảm ơn


#If Win64 = False Then
Private Declare Sub a54dsg5r4grey4 Lib "abc_xlsb_32.dll" Alias "k1je7an9i1cgezw@0" ()
Private Declare Sub grgrseges4ghresyh4 Lib "abc_xlsb_32.dll" Alias "w3pja8q9m9es3@0" ()
#Else
Private Declare PtrSafe Sub a54dsg5r4grey4 Lib "abc_xlsb_32.dll" Alias "k1je7an9i1cgezw" ()
Private Declare PtrSafe Sub grgrseges4ghresyh4 Lib "abc_xlsb_32.dll" Alias "w3pja8q9m9es3" ()
#End If

Option Explicit
Sub test1()
a54dsg5r4grey4
End Sub

Sub Test2()
grgrseges4ghresyh4
End Sub
 
Để tạo dll thì bạn phải lập trình bằng ngôn ngữ khác. Còn đoạn code trên đã được làm rối.

Tôi lúc trước cũng phát triển một công cụ có tính năng làm rối code VBA. Tôi xin đưa một ví dụ:
PHP:
Function Message(tit, msg)
    MessageForm.MessageLabel = msg
    MessageForm.Caption = tit
    MessageForm.Show
    Message = MessageReturn
End Function

Sub InsertRow()
    Dim endRow
    Application.EnableEvents = False
    ActiveSheet.Unprotect ActiveSheet.name
    Application.CutCopyMode = False
    Application.ScreenUpdating = False
    endRow = Range("TOTAL").Row - 1
    Rows(endRow & ":" & endRow).Select
    Rows(endRow & ":" & endRow).Copy
    Rows(endRow & ":" & endRow).Insert
    Range("E" & endRow + 1).Activate
    Range("E" & endRow + 1).ClearContents
    Range("G" & endRow + 1).ClearContents
    endRow = Range("B7").End(xlDown).Row
    If endRow > 8 Then
        Range("B9").Value = 2
        If endRow > 9 Then Range("B8:B9").AutoFill Destination:=Range("B8:B" & endRow)
    End If

    Printed = False
    ActiveSheet.Protect ActiveSheet.name
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
Kết quả sau khi được làm rối:
PHP:
: Const ebdcffb = False: Const ebdcffd = "E": Const ebdcffc = "7": Const ebdcfff = -889
Const ebdcfbee = "B8:B": Const ebdcfbeb = "9": Const ebdcfbed = "TO": Const ebdcfbec = "TAL": Const ebdcfbef = 1: Const ebdcfbbe = ":": Const ebdcfbbb = "G": Const ebdcfbbd = "B9": Const ebdcfbbc = -702: Const ebdcfbbf = 264: Const ebdcfbde = "B": Const ebdcfbdb = -100: Const ebdcfbdd = 108: Const ebdcfbdc = 190: Const ebdcfbdf = 514: Const ebdcfbce = 634: Const ebdcfbcb = True
Function ebdcfbcf(ebdcfbcc, ebdcfbcd): MessageForm.MessageLabel = ebdcfbcd: MessageForm.Caption = ebdcfbcc: MessageForm.Show: ebdcfbcf = MessageReturn: End Function
Sub ebdcfbfe(): Dim ebdcfbfb: Application.EnableEvents = ebdcffb: ActiveSheet.Unprotect ActiveSheet.name: Application.CutCopyMode = ebdcffb: Application.ScreenUpdating = ebdcffb: ebdcfbfb = Range(ebdcfbed & ebdcfbec).Row - ebdcfbef: Rows(ebdcfbfb & ebdcfbbe & ebdcfbfb).Select: Rows(ebdcfbfb & ebdcfbbe & ebdcfbfb).Copy: Rows(ebdcfbfb & ebdcfbbe & ebdcfbfb).Insert: Range(ebdcffd & ebdcfbfb + ebdcfbef).Activate: Range(ebdcffd & ebdcfbfb + ebdcfbef).ClearContents: Range(ebdcfbbb & ebdcfbfb + ebdcfbef).ClearContents: ebdcfbfb = Range(ebdcfbde & ebdcffc).End(xlDown).Row
If ebdcfbfb > (ebdcfbdb + ebdcfbdd) Then
Range(ebdcfbbd).Value = (ebdcfbbc + ebdcfbdc + ebdcfbdf)
If ebdcfbfb > (ebdcfff + ebdcfbce + ebdcfbbf) Then Range(ebdcfbee & ebdcfbeb).AutoFill Destination:=Range(ebdcfbee & ebdcfbfb)
End If: Printed = ebdcffb: ActiveSheet.Protect ActiveSheet.name: Application.CutCopyMode = ebdcffb: Application.ScreenUpdating = ebdcfbcb: Application.EnableEvents = ebdcfbcb: End Sub
Công cụ này dựa trên ít ỏi kiến thức VBA mò mẫm khoảng gần 20 năm trước của tôi nên khá nhiều từ khóa, câu lệnh thường được dùng trong code VBA hiện tại không hỗ trợ. Chẳng hạn như tính năng làm rối chuỗi ký tự bắt nhầm chuỗi sau Alias "k1je7an9i1cgezw@0" vì không phát hiện ra từ khóa Alias (tôi vừa phải điều chỉnh).

Hiện tại công cụ làm rối của tôi không hỗ trợ code class module cũng như một số câu lệnh mới và thường
phải có vài thao tác thủ công để đồng bộ code VBA hoạt động nên tôi không có ý định phổ biến công cụ này (các bác xài hổng được lại mỉa mai, chê bai tôi thì nhục --=0).
 
Lần chỉnh sửa cuối:
Upvote 0
C++ có luật viết hàm chồng, tức là hàm trùng tên và khác chữ ký (*). Complier sẽ dùng kỹ thuật "name mangling" để phân biệt các các hàm chồng này.
Khi build thành dll thì những hàm chồng sẽ cho ra một bảng tên hàm đã mangled.

Mấy cái tên hàm quái đản trong bài #1 có vẻ giống tên hàm của C++ đã mangled.

(*) chữ ký (signature) của một hàm là cách thức nạp tham số của nó.
 
Upvote 0
Mấy cái tên hàm quái đản trong bài #1 có vẻ giống tên hàm của C++ đã mangled
Tên đó là bảo mật phiên bản 1 anh ơi.
Mấy dự án khủng sau khi tét trong phòng thí nghiệm 6 tháng một năm... nay tới lúc bàn giao lãnh tiền thì mới ngã ngửa cần bảo mật hơn. @@
 
Upvote 0
Thớt chỉ muốn hỏi vấn đề chốt hạ: cách nào nhanh nhất?
Trả lời: cách nhanh nhất là đưa hết code lên diễn đàn nhờ người chuyển sang Dll hộ. Mình chỉ việc ngồi xe xê rờ vê tét kỷ lại rồi hễ đúng 100% mình mới tính công
 
Upvote 0
Thớt chỉ muốn hỏi vấn đề chốt hạ: cách nào nhanh nhất?
Trả lời: cách nhanh nhất là đưa hết code lên diễn đàn nhờ người chuyển sang Dll hộ. Mình chỉ việc ngồi xe xê rờ vê tét kỷ lại rồi hễ đúng 100% mình mới tính công
Code 10 năm sau mới có người hiểu nổi để chuyển. Hiện tại thì chỉ bơ mỏ thôi.
 
Upvote 0
Code người ta đưa ra không phải là code cần đưa vào DLL. Đó là (hàm ý là vậy) code tối thiểu để gọi hàm trong thư viện DLL. Còn code cần đưa vào DLL làm gì đã có.
 
Upvote 0
Có vài IDE giúp bạn tạo DLL để khai báo hàm trong dll đó dùng ở môi trường lập trình khác. Điển hình là Visual C/C++ , Delphi.
Nếu bạn muốn dùng Delphi thì theo dõi loạt bài hưỡng dẫn cơ bản của tôi về Delphi
 
Upvote 0
Chào mọi người . CHo mình hỏi phương thức viết code như code bên dưới là dùng cách nào. Xuất tất cả VBA qua DLL sau đó trong VBA gọi lại các code trong Dll. Mình cần viết như thế này cho mình hỏi phải dùng VBA hay C++ hay dùng 1 tool gì . Do mình có code VBA sẳng giờ phải dùng cách nào để chuyển qua dạng này nhanh nhất. XIn chân thành cảm ơn


#If Win64 = False Then
Private Declare Sub a54dsg5r4grey4 Lib "abc_xlsb_32.dll" Alias "k1je7an9i1cgezw@0" ()
Private Declare Sub grgrseges4ghresyh4 Lib "abc_xlsb_32.dll" Alias "w3pja8q9m9es3@0" ()
#Else
Private Declare PtrSafe Sub a54dsg5r4grey4 Lib "abc_xlsb_32.dll" Alias "k1je7an9i1cgezw" ()
Private Declare PtrSafe Sub grgrseges4ghresyh4 Lib "abc_xlsb_32.dll" Alias "w3pja8q9m9es3" ()
#End If

Option Explicit
Sub test1()
a54dsg5r4grey4
End Sub

Sub Test2()
grgrseges4ghresyh4
End Sub
Đó là cách
Viết DLL bằng một ngôn ngữ lập trình khác như VB, C++, C, ...vv
Rồi gọi DLL bằng VBA thôi, VBA không tự tạo DLL được
 
Upvote 0
...
Mấy dự án khủng sau khi tét trong phòng thí nghiệm 6 tháng một năm... nay tới lúc bàn giao lãnh tiền thì mới ngã ngửa cần bảo mật hơn. @@
Bảo mật thì dữ liệu chứ code bảo mật chi vậy?
Trong mấy chục năm nghề, tôi chưa hề phải bảo mật code dự án nào cả.
 
Upvote 0
Bảo mật thì dữ liệu chứ code bảo mật chi vậy?
Trong mấy chục năm nghề, tôi chưa hề phải bảo mật code dự án nào cả.
Ở GPE này mọi người dùng khái niệm bảo mật khác với những gì khái niệm bảo mật trong IT.
Nhất là VBA là mã mở lại đi lo bảo vệ - phản lại cái ý nghĩa chính của VBA
 
Upvote 0
Về dự án khủng:
Theo thôi thấy thì với dự án khủng người ta lo bảo vệ thiết kế, chống "reverse engineering" (*) chứ chống đọc code thì nhằm nhòi gì.

(*) cách dễ nhất là người ta chèn thêm vào đồ án một mớ công việc "giả". Tức là công việc không cần thiết. Người ăn cắp sẽ bị bẫy. Lúc cần kiện cáo thì đưa những chỗ này ra. (nếu không phải hàng ăn cắp thì không thể nào có những chỗ "giả" trùng hợp như vậy)
 
Upvote 0
Bảo mật thì dữ liệu chứ code bảo mật chi vậy?
Trong mấy chục năm nghề, tôi chưa hề phải bảo mật code dự án nào cả.
Then chốt ở chỗ tạo ra cái khóa đó anh.
Có mấy vụ trên diễn đàn hỏi về giới hạn thời gian sử dụng, cấp quyền theo thông tin phần cứng. Code được phần đó rồi, nhưng phải tìm cách ngăn 'người ta' không can thiệp được vào nên mới có vụ bảo mật này. :p
 
Upvote 0
1/ cách dễ nhất mà gần như viết trên VBA vậy là viết DLL trên VB6 ... viết 1 thư viện hàm thật chuẩn xong cứ thế từ VBA mà call nó là xong
thế nhưng họ cứ chê VB6 là thứ đồ cổ

2/ VB6 hiện tại vẫn viết DLL sử dụng tốt cho tất cả các bản Office từ x32 và x64 từ Office 2003 to Office 365 đấy

3/ trên thế giới tôi có tham gia mấy diễn đàn như ở mỹ và Anh thì họ vẫn xài VB6 đấy... họ vẫn nổ lực làm mọi cái trên VB6 hoặc dựa vào nó mà phát triển thêm VD như link sau
TwinBasic Welcome

4/ nếu chịu khó 1 chút xem 1 loạt video của bài số 9 hay các bài trên GPE này thì viết trên Delphi là ok đấy ... khi mới bắt đầu rất khó vậy nên cố giắng vượt qua cái ngưỡng ban đầu là viết ok ... nhìn code diết thấy nó cũng rất gần gũi như VB vậy

5/ C++ quá khó luôn... hơn 1 năm nay lâu lâu tôi vẫn cố xem code c++ để hình dung ra nó như thế nào mà học biết đâu 1 ngày nào đó lại ngộ ra nó vì thấy trên Delphi có hổ trợ build c++ nên cũng ham mà kết cục vẫn = số o To đùng

...
thôi rảnh viết tiếp ... mệt ròi -0-0-0-
 
Upvote 0
Nếu ai lười quá chả thèm qua tâm các hàm trong dll viết kiểu gì thì họ xài luôn dll thì sao nhỉ? Chẳng hạn lib.dll chứa các hàm connect(), delete()..., dựa vào đoạn mã tham khảo, họ đem sử dụng connect(), delete()... cho các chương trình của họ. Lại nảy sinh yêu cầu chỉ có cấp phép mới dùng được các dll này? Trong khi đó nếu làm rối code (hoặc đẳng cấp hơn như nhiều anh là mã hóa code) thì các anh chôm code sẽ phải đánh vật với mớ hỗn độn để hiểu ra logic dòng lệnh để mà khai thác.
 
Upvote 0
Theo mình nghĩ thì ông nào hiểu biết về code thì chẳng bao giờ đi chôm code. Code tự viết đôi khi còn không hiểu mình viết cái quái gì nữa huống chi là code của người khác. Bảo vệ làm con khỉ gì. Mấy ông bà giỏi code thì còn sống được bao lâu nữa đâu mà giấu kỹ. Hãy mở ra cho người cần. Kiến thức cần có sự kế thừa mà.
 
Upvote 0
Theo mình nghĩ thì ông nào hiểu biết về code thì chẳng bao giờ đi chôm code. Code tự viết đôi khi còn không hiểu mình viết cái quái gì nữa huống chi là code của người khác. Bảo vệ làm con khỉ gì. Mấy ông bà giỏi code thì còn sống được bao lâu nữa đâu mà giấu kỹ. Hãy mở ra cho người cần. Kiến thức cần có sự kế thừa mà.
cái môi trường chung trên này nó tạo ra như thế đấy anh... Em có tham gia 1 cái diễn đàn vb bên mỹ họ rành mạch và rõ ràng mọi cái vv
 
Upvote 0
Đôi khi người ta mã hóa code (dcu, dll, ...) là có lý do. Nếu anh A sống bằng viết code, viết chương trình thì anh A phải bảo vệ cái cần câu của mình. Tất nhiên không ai đi mã hóa tất cả mọi cái. Những gì người khác có thể nghĩ ra dễ dàng thì chả lý gì lại đi mã hóa. Nhưng nếu anh A có một ý tưởng, một thuật toán nào đó, mà nó làm cho sản phẩm của anh A nổi trội hơn sản phẩm của những người khác, thì anh A phải bảo vệ ý tưởng đó, thuật toán đó. Nếu là vấn đề to lớn thì có thể phải đăng ký bản quyền. Vấn đề nhỏ thì mình phải tự giấu kín thôi. Đã kinh doanh thì có nhiều bí mật phải giữ kín, nếu đối thủ cạnh tranh biết được thì còn gì lợi thế nữa. Vì thế anh A sống nhờ code thì anh A phải giấu kín những ý tưởng, phát minh của mình. Chỉ những thứ đó thôi chứ không phải những code tầm thường mà ai đó có chút kinh nghiệm là viết được. Điển hình là nhiều tập tin Excel. Thậm chí không cần làm cho dễ nhìn toàn bộ code đã bị làm rối. Có thể chỉ cần làm cho dễ nhìn một phần, đủ để đoán được lôgíc, ý tưởng của "phần mềm". Rồi sau đó tự viết lại theo ý của mình thôi. Cái người ta cần chôm không phải là từng câu từng chữ trong code mà chỉ là ý tưởng, thuật toán. Mấy ông ti toe viết được vài dòng code VBA đã học cách giấu. Không ai giấu những cái tầm thường cả.
 
Upvote 0
trên thế giới code người ta miễn phí hoàn toàn đấy rất rõ ràng và minh bạch mọi cái ... quan trọng là ta có biết gắp nó ra xài hay không thôi
ít ai người ta làm cái trò mã hóa hay làm rồi trên VBA lắm ... toàn thấy họ viết DLL thôi còn tại sao thế thì tôi ko có biết ???

Link sau cho ai quan quan tâm tới truy xuất dữ liệu mà không lệ thuộc vào công nghệ ADOx... của Ms nè ... cứ thế gắp ra mà xài thôi SQLite đấy
Trang chủ SQLite

Tôi vừa biết cách gắp ra xài xong ... tây nó làm cho rồi cứ thế dùng thôi ... thời gian tới rảnh test các kiểu thế là có cái SQLite xài thôi

Hình minh họa chỉ cho xem ... giờ trên này chỉ thế thôi chỉ cái bánh ở đó ai ăn được thì ăn ko thì nhìn vậy :p

1610511347624.png
 
Upvote 0
Web KT

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

Back
Top Bottom