Chúng ta đã có một topic về tạo
1. Về mức độ bảo mật
Như một số anh em đã thảo luận thì DLL VB6 khả năng bị dịch ngược là gần như không thể, trong khi đó DLL của VB.NET thì dễ bị bẻ hơn.
2. Về chuyển đổi.
-Các logic toán học thông thường, như xử lý với mảng, ...
Các logic này dễ chuyển đổi nhất. Đối với các biến không phải là object, việc xử lý trên VBA ra sao thì trên VB.NET hay VB6 cũng làm tương tự. Đối với VB.NET thì có khác một chút xíu, đặc biệt với mảng. Tuy nhiên thông qua các topic đang có trên diễn đàn, thì việc xử lý này cũng
Còn nếu trên VB6 thì có thể nói, VBA xử lý ra sao thì bê y nguyên code như vậy lên VB6.
Có một số lưu ý khi mọi người chuyển đổi.
Cấu trúc chương trình nên tuân thủ theo cấu trúc sau:
Tức là các thủ tục hay hàm chuyển đổi, không nên có sự xuất hiện của msgbox. Ở hình ảnh minh họa phía trên, các chữ màu đỏ (hàm hay thủ tục con) là các đơn vị sẽ được chuyển thành DLL. Nội dung bên trong chúng nên tránh sử dụng msgbox.
Nguyên tắc 1: Các hàm và thủ tục con không chứa hàm msgbox.
Ngoài ra có một số biến được khai báo public.
Nếu trên VBA, các biến này xuất hiện ở trong bất cứ hàm hay thủ tục con nào đều được. Nhưng khi đã chuyển sang DLL, thì các biến public nên được khai báo trong thông số đấu vào củ hàm hay thủ tục con.
Nếu để như hình trên thì ở bên DLL, chương trình sẽ không hiểu p1 là gì, p2 là gì.
Do đó phải chuyển đổi như sau:
Nguyên tắc 2: Biến public phải được khai báo là biến đầu vào cho các hàm hay thủ tục có sử dụng tới chúng mà chúng ta muốn chuyển các hàm hay thủ tục này sang DLL.
-Một vấn đề anh em hơi lăn tăn và ngại ngùng là làm việc với Word hay Excel thì sao?
Trước tiên nói về Word (có lẽ Excel cũng tương tự).
Thay vì viết tràn lan, ở cái đoạn ... đó, tôi sẽ ngắt nó ra làm thủ tục con và đưa thủ tục này vào DLL.
Như vậy trên code VBA nếu các bạn có thói quen ngắt tách thủ tục con ngay sau khi khai báo xong các Object, thì việc chuyển sang DLL cũng sẽ bớt đi được công sức.
Nguyên tắc 3 : Làm việc với các đối tượng, thì các đối tượng này làm biến đầu vào cho hàm hay thủ tục con khi chuyển sang DLL, đơn giản ta chỉ cần khai báo chúng là Object. Bên trong chương trình, tên các phương thức và các thuộc tính trước nay như thế nào thì vẫn như vậy. Chú ý, các hằng số nên viết giá trị là số.
Chẳng hạn trên VBA bạn có thể viết là :
Nhưng bên DLL sẽ không hiểu wdStory là gì, việc google tra cứu cũng đơn giản thôi, khi chuyển đổi sang DLL thì bạn nên viết thẳng giá trị, ví dụ là:
Với nguyên tắc số 3, nếu tuân thủ, bạn sẽ không còn phải băn khoăn, để làm việc với Word hay Excel trên VB6 hay VB.NET thì ta phải làm gì. Code trên VBA như nào thì cứ bê sang như vậy thôi. Có lẽ máy tính đã tự hiểu được Object mà nó nhận được chính là Word (hay Excel) rồi.
Chú ý, khi chuyển đổi sang VB.NET, do không khai báo Word, mà tôi đơn thuần làm theo cách trên, thì cấu trúc With~End With không thấy hoạt động.
Tôi đành phải viết:
Hơi vất vả xíu nhưng code cũng đã chạy. Còn với VB6 thì mọi việc thuận lợi hơn nhiều, như đã nói, VBA như thế nào thì cứ mang sang VB6 như vậy, miễn là bạn tuân thủ nguyên tắc số 3.
Topic sẽ tiếp tục được cập nhật thêm. Nếu bạn có kiến thức gì, thì cứ tùy ý trao đổi trong này.
Bạn cần đăng nhập để thấy link
, và topic tạo
Bạn cần đăng nhập để thấy link
(sẽ được công khai vào ngày 28/10/2021), thì tôi có một số kinh nghiệm chia sẻ cho mọi người.1. Về mức độ bảo mật
Như một số anh em đã thảo luận thì DLL VB6 khả năng bị dịch ngược là gần như không thể, trong khi đó DLL của VB.NET thì dễ bị bẻ hơn.
2. Về chuyển đổi.
-Các logic toán học thông thường, như xử lý với mảng, ...
Các logic này dễ chuyển đổi nhất. Đối với các biến không phải là object, việc xử lý trên VBA ra sao thì trên VB.NET hay VB6 cũng làm tương tự. Đối với VB.NET thì có khác một chút xíu, đặc biệt với mảng. Tuy nhiên thông qua các topic đang có trên diễn đàn, thì việc xử lý này cũng
Bạn cần đăng nhập để thấy link
.Còn nếu trên VB6 thì có thể nói, VBA xử lý ra sao thì bê y nguyên code như vậy lên VB6.
Có một số lưu ý khi mọi người chuyển đổi.
Cấu trúc chương trình nên tuân thủ theo cấu trúc sau:
Bạn cần đăng nhập để thấy đính kèm
Tức là các thủ tục hay hàm chuyển đổi, không nên có sự xuất hiện của msgbox. Ở hình ảnh minh họa phía trên, các chữ màu đỏ (hàm hay thủ tục con) là các đơn vị sẽ được chuyển thành DLL. Nội dung bên trong chúng nên tránh sử dụng msgbox.
Nguyên tắc 1: Các hàm và thủ tục con không chứa hàm msgbox.
Ngoài ra có một số biến được khai báo public.
Nếu trên VBA, các biến này xuất hiện ở trong bất cứ hàm hay thủ tục con nào đều được. Nhưng khi đã chuyển sang DLL, thì các biến public nên được khai báo trong thông số đấu vào củ hàm hay thủ tục con.
Bạn cần đăng nhập để thấy đính kèm
Nếu để như hình trên thì ở bên DLL, chương trình sẽ không hiểu p1 là gì, p2 là gì.
Do đó phải chuyển đổi như sau:
Bạn cần đăng nhập để thấy đính kèm
Nguyên tắc 2: Biến public phải được khai báo là biến đầu vào cho các hàm hay thủ tục có sử dụng tới chúng mà chúng ta muốn chuyển các hàm hay thủ tục này sang DLL.
-Một vấn đề anh em hơi lăn tăn và ngại ngùng là làm việc với Word hay Excel thì sao?
Trước tiên nói về Word (có lẽ Excel cũng tương tự).
Bạn cần đăng nhập để thấy đính kèm
Thay vì viết tràn lan, ở cái đoạn ... đó, tôi sẽ ngắt nó ra làm thủ tục con và đưa thủ tục này vào DLL.
Như vậy trên code VBA nếu các bạn có thói quen ngắt tách thủ tục con ngay sau khi khai báo xong các Object, thì việc chuyển sang DLL cũng sẽ bớt đi được công sức.
Nguyên tắc 3 : Làm việc với các đối tượng, thì các đối tượng này làm biến đầu vào cho hàm hay thủ tục con khi chuyển sang DLL, đơn giản ta chỉ cần khai báo chúng là Object. Bên trong chương trình, tên các phương thức và các thuộc tính trước nay như thế nào thì vẫn như vậy. Chú ý, các hằng số nên viết giá trị là số.
Chẳng hạn trên VBA bạn có thể viết là :
Mã:
unit:=wdStory
Mã:
unit:=6 'wdStory
Chú ý, khi chuyển đổi sang VB.NET, do không khai báo Word, mà tôi đơn thuần làm theo cách trên, thì cấu trúc With~End With không thấy hoạt động.
Tôi đành phải viết:
Mã:
obj.phuongthuca
obj.thuoctinhA.thuoctinhA1.... =
obj.thuoctinhB.thuoctihB2...=
Topic sẽ tiếp tục được cập nhật thêm. Nếu bạn có kiến thức gì, thì cứ tùy ý trao đổi trong này.