Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 25 kết quả

Đề tài: Kỹ thuật lập trình Plugin trong lập trình VC++

  1. #1
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Kỹ thuật lập trình Plugin trong lập trình VC++

    Hôm nay Z chia sẽ cho mọi người 1 kỹ thuật lập trình cũng khá ứng dụng đó là Plugin.

    Kỹ thuật này chủ yếu dựa trên đặc tính thứ 3 của OOP là Đa Hình mà một số cách import và export hàm từ DLL.

    Ví dụ như bạn viết 1 chương trình nhập xuất dữ liệu nào đó.

    Thông thường bạn thường hay viết các module đó trong Main Project.

    Nhưng với Plugin thì các moudle đó lại viết trong DLL. Main Project chỉ có nhiệm vụ quản lý các module trong DLL và tài nguyên chung cho chương trình.

    Các module trong DLL được quản lý dưới dạng các interface (abstract class). Có nghĩa là Main Project không hề biết đó là module nào nhưng khi thực thì tính năng đa hình của Object sẽ giúp nó thi hành đúng Module cần thiết từ người sử dụng yêu cầu.

    Mình ví vụ chương trình sau hiện tại gồm có :
    Code:
    Application.exe  
    - Quản lý các Plugin và Resource
    
    PluginBasic.dll 
    - Chứa các moudle nhập xuất cơ bản
    
    Product.bin 
    - (thực là là DLL file nhưng mình đổi tên) 
    Chứa danh sách các loại sản phẩm để quản lý 
    (có nghĩa rằng sau này có thêm các loại sản phẩm khác thì mình sẽ rebuild lại file này).
    
    zPluginAdvance.dll
    - Module nâng cấp chứa thêm chức năng export DL ra file HTML
    
    .... dll
    - Và có thể thêm nữa, chương trình có thể detect được.
    + Nếu chương trình chỉ có Application.exe thì nó ko có chức năng nào khác.
    + Bạn copy file PluginBasic.dll vào cùng thư mục thì nó có chức năng nhập, xuất cơ bản, nhưng nếu không có Product.bin thì bạn sẽ không nhận ra được sẽ nhập các sản phẩm nào.



    + Copy tiếp zPluginAdvance.dll bạn lại có thêm chức năng thứ 3 như sau:




    Dưới đây là Source Code mà Chương trình Demo.

    Hiện tại mình ko có thời gian để giải thích cụ thể code. Nhưng các bạn có thắc mắc thì mình sẽ giải thích sau,
    Attached Files Attached Files

  2. #2
    Ngày gia nhập
    09 2008
    Bài viết
    15

    Bạn ơi, liệu bạn có thể post code Vc6 được không ?
    Cảm ơn bạn rất nhiều !

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi yaiba_forever Xem bài viết
    Bạn ơi, liệu bạn có thể post code Vc6 được không ?
    Cảm ơn bạn rất nhiều !
    Code này y chang của VC6 mà bạn, nó chỉ khác nhau chỗ cái IDE thôi.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Bạn ơi, liệu bạn có thể post code Vc6 được không ?
    Cảm ơn bạn rất nhiều !
    VC6 ko hỗ trợ Unicode nên mình cũng ko xài nữa và công nghệ nó cũng khá xưa rồi. Code này có thể chạy trên visual 6 như mèo đã nói nhưng mà bạn phải khởi tạo lại project rồi copy nó vào.


    Mình post bài viết này cũng lâu rồi nhưng thấy nó ít được quan tâm. Có lẽ 1 phần nó quá rắc rối và có lẽ các bạn cũng cảm thấy không cần thiết...

    Nhưng nếu bạn đã viết được 1 phần mềm thì bạn có đặt câu hỏi là phần mềm đó sẽ được cập nhật như thế nào? Biên dịch lại là 1 cách. Nhưng những ứng dụng lớn thì ko phải lúc nào cũng có thể biên dịch và yêu cầu người sử dụng cài đặt lại.

    Mình thích những ứng dụng có thể lên phiên bản mà ko cần cài lại như Firefox, Các chương trình virus như Avg và ngay cả hdh microsoft. Bởi vì đối với phần mềm này thì Plugin (còn gọi là components) và nền móng, và khi thay 1 plugin thì sẽ thay đổi cả chương trình.

    Hiện nay thì hầu như mình chưa thấy ở Việt Nam phầm mềm nào có tích hợp plugin kể cả BKAV (mỗi lần update phải cài lại).

    Cái sơ đồ ứng dụng của chương trình mình đã post lên nó như sau:


    Mình sẽ có file:
    - Basic.dll
    - Advance.dll

    Vấn đề là làm sao ứng dụng có thể biết 2 file này là plugin.
    Mình sẽ quét toàn bộ các file .dll nằm trong thư mục nào đó. Nếu file dll nào exports đúng 2 hàm
    Code:
    + getPluginCount (số components plugin bên trong)
    + getPlugin (khởi tạo components plugin)
    Thì nó sẽ là file Plugin.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 25-12-2008 lúc 11:56 AM.

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Ví dụ như file Basic.DLL

    Nó sẽ trả về 2 Components là CNhapSanPhamCXuatSanPham. Dĩ nhiên Application chỉ cần giữ địa chỉ của 2 đối tượng này và trừu tượng nó thành interface IPlugin.

    Và số lượng Plugin Components load từ các file dll sẽ tạo nên menu cho chương trình. Khi bạn chọn 1 menu nào thì có nghĩa là yêu cầu Components đó chạy. Lúc này mình sẽ call phương thức ảo "IPlugin::Run..." và chạy.
    -> Như vậy Application sẽ có nhiệm vụ quản lý plugin (components)


    Tiếp theo là product.dll. Nó là một kho chứa các loại sản phẩm. Và cũng exports 2 function là:
    getProductCount() hiện tại thì trả về 3 (có 3 loại sản phẩm)
    createProduct() tạo các đối tượng sản phẩm.

    Plugin CNhapSanPham sẽ xử lý file product này để in ra danh sách loại sản phẩm trong menu nhập và cũng trả về sản phẩm dưới dạng trừu tượng IProduct cho Application.
    Vậy Application sẽ có 1 nhiệm vụ nữa là quản lý resource
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 21-02-2010 lúc 11:05 AM.

  6. #6
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Mặc định Kỹ thuật lập trình Plugin trong lập trình VC++

    Mình biết không phải ai đọc cũng có thể hiểu mình đang viết cái gì. Nhưng khi viết ra thì mình hy vọng sau khi đọc bài viết thì các bạn sẽ có 1 cái nhìn rộng hơn trong lập trình.
    Công nhận khó hiểu thiệt.

    Nói thiệt cách đây khoảng gần 1 tháng zk có đọc nó, nhưng vẫn còn lơ mơ. (sau đó bị mấy môn trên trường cuốn đi, quên mất cái này )
    giờ nó nổi lên, đọc lại thấy cũng hiểu được sơ sơ.

    Thank Zc vì bài viết này.

    Nếu các bạn ai đó đọc thấy khó hiểu thì các bạn thử cách của zk thử . chụi khó nhìn cái hình, đọc code, và phân tích nó rồi quay lại đọc chữ thì sẽ dễ hiểu hơn < kinh nghiệm cá nhân >.

    để hiểu được cái này các bạn phải có được cái nhìn về 'đa hình' của C++ và OOP.

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Ùm. Thật ra thì ko phải lúc nào cũng có thể ráp Plugin vào vài lúc đó chương trình khá rắc rối. Do đó cần phải xem két rất kỹ trước khi thiết kế, Module nào có khả năng cập nhật liên tục ...etc

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    15

    Cảm ơn bạn rất nhiều. Mình đọc thấy khó hiểu quá nhưng cố vậy. File Application.exe của cậu khi chạy nó báo lỗi liền , có phải nó cần .Net Framework không nhỉ ?

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi yaiba_forever Xem bài viết
    Cảm ơn bạn rất nhiều. Mình đọc thấy khó hiểu quá nhưng cố vậy. File Application.exe của cậu khi chạy nó báo lỗi liền , có phải nó cần .Net Framework không nhỉ ?
    Cái này dùng api mà bạn, đâu có chạy trên dot net.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Trích dẫn Nguyên bản được gửi bởi yaiba_forever Xem bài viết
    Cảm ơn bạn rất nhiều. Mình đọc thấy khó hiểu quá nhưng cố vậy. File Application.exe của cậu khi chạy nó báo lỗi liền , có phải nó cần .Net Framework không nhỉ ?
    Máy của bạn cài winXP và chưa được cập nhật gói packet Visual C++ 2005 Redistributable Package (x86). Cũng đúng vì bạn mà để tự động update với XP ko bản quyền thì MS sẽ cài victim lên PC bạn liền.

    Dung lượng 2MB.

    Có thể đây là 1 chiến lược của MS. Nhưng rõ ràng Y!M hay các ứng dụng khác vẫn chạy bình thường mà ko cần gói packet này. Đơn giản vì Yahoo, Adobe, Google... tất cả đều phát triển trên công nghệ riêng của nó. Và cũng là lý do mà mình đang cố gắng rời bỏ visual studio để tiếp cận đến thế giới opensource.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 21-12-2008 lúc 08:10 PM.

Các đề tài tương tự

  1. Chèn Plugin Like Facebook vào trong asp.net?
    Gửi bởi nguyenducbachy trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 01-05-2013, 04:33 PM
  2. Kỹ thuật lập trình plugin cho yahoo 9.0
    Gửi bởi Cpro trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 19-06-2011, 12:43 AM
  3. Cần tài liệu về plugin (add-ons) !!!
    Gửi bởi phthong231 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 0
    Bài viết cuối: 02-10-2010, 11:05 AM
  4. Viết Plugin Đọc các loại File trong C# Dùng Inhetrite Interface, Abstract, hay Class
    Gửi bởi buidinhba5 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 11-07-2009, 04:27 PM
  5. Kỹ thuật lập trình plugin cho yahoo 9.0
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 29-01-2009, 02:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn