2011-08-20 29 views
5

Cách tốt nhất để triển khai hệ thống mô-đun bên ngoài cho ứng dụng DELPHI là gì?Thực hiện mô-đun bên ngoài

Những gì tôi cần là rất cơ bản thực sự:

  • APP chính phát hiện nếu một mô-đun là hiện tại và tải nó (Chạy thời gian)
  • Modules có thể lưu trữ hình thức
  • Modules có thể lưu trữ DataModules
  • Mô-đun có thể Lưu mã số

Tôi cần sử dụng biểu mẫu cửa hàng bên trong các biểu mẫu khác và chỉ làm standAlone

tôi sử dụng một cái gì đó như thế này

 if Assigned(pNewClass) then begin 
      Application.CreateForm(pNewClass, _lFrm); 
      _lFrm.Hide; 
      _lFrm.BorderStyle := bsNone; 
      _lFrm.Parent := pBasePNL //(TPanel); 
      _lFrm.Align := alClient; 
     end; 

Vì vậy, tôi tạo ra một TForm, nhưng đặt nó bên trong một TPanel.

Đối với DataModules, chúng tôi lưu trữ ImageLists một cách tự do để ideia thay đổi ICO ứng dụng chỉ cần thay đổi mô-đun bên ngoài.

Vậy cách tốt nhất để đạt được điều này là gì?

Đã xem BPL thời gian chạy nhưng dường như không hiểu cách thực hiện. Cảm ơn.

UPDATE: .....................................

Sau khi đọc một số câu hỏi và câu trả lời liên quan, tôi nghĩ rằng tôi đã tìm thấy câu trả lời và giải pháp của mình.

http://edn.embarcadero.com/article/27178

Bài viết này rất đơn giản nhưng đáng kinh ngạc.

Vâng logic là ở đó tôi dường như không để có được nó để hiển thị các hình thức 

Tôi chỉ là thử nghiệm ví dụ 2

Nó tải BPL, nhưng không nhận được các biểu mẫu:

AClass := GetClass('TForm2'); 

Luôn retrievex 'nil'

Nhưng BPL vì nó đã đăng ký:

RegisterClass(TForm2); 

Bất kỳ ai cũng có thể trợ giúp điều này.

+1

Bạn có thể tìm thêm thông tin nếu bạn tìm kiếm các plugin –

+0

Điều này thực sự là một bản sao, chỉ cần nhìn vào danh sách các câu hỏi liên quan đến bên phải –

+0

Chỉ cần làm, cảm ơn. Chỉ cần tìm thấy giải pháp của tôi ở đó. – Jlouro

Trả lời

2

Tôi đã giới thiệu cho bạn, thật dễ dàng để bắt đầu! Tuy nhiên ... Bắt đầu là không hoàn thành.

Mỗi khi tôi bắt đầu sử dụng plugin, sau này tôi đã hối tiếc về nó. Tuy nhiên, như bạn nói, bạn muốn có một hệ thống plugin nhị phân. Vì vậy, BPL là giải pháp đúng. David khuyên bạn nên sử dụng giao diện (với DLL thuần thay vì gói BPL thời gian chạy đầy đủ) và điều này sẽ giải quyết một số vấn đề không ổn định BPL do không phiên bản các lớp của bạn, và do đó phụ thuộc vào khả năng tương thích với ứng dụng và gói của bạn, đúng. Nếu bạn không cần phải chia sẻ bộ nhớ và không cần phải sử dụng borlandmm.dll (quản lý bộ nhớ chia sẻ) thì một DLL thẳng với giao diện sẽ hoạt động tốt.

Nếu bạn có thể làm tất cả mọi thứ bạn cần làm chỉ với kịch bản, và làm cho hệ thống plugin của bạn chỉ với kịch bản, sau đó làm theo cách đó. Nếu bạn có thể thoát khỏi các DLL, giao diện và không chia sẻ bộ nhớ, thì hãy sử dụng các tệp DLL thuần túy. Nếu bạn phải chia sẻ bộ nhớ và loại lớp, thì có, sử dụng BPL.

Hãy coi chừng việc sử dụng BPL (Gói thời gian chạy) đi kèm với rất nhiều tác dụng phụ bạn có thể không mong đợi. Các ứng dụng dựa trên BPL lớn nhất mà tôi từng làm đã trở nên lộn xộn hơn và kém ổn định hơn bất kỳ ứng dụng nguyên khối nào mà tôi đã từng làm. Có vẻ như nó chỉ có thể thông cho các gói cho đến khi bạn thử chúng, và sau đó tôi tìm thấy, tôi thông cho monoliths một lần nữa.

Nếu bạn sử dụng gói BPL đúng cách và bạn phiên bản plugin của mình đúng cách, mọi thứ đều ổn. BPL là rất lớn. Nhưng trong thế giới thực, có vẻ như phiên bản lành mạnh và khả năng tương thích và khả năng tương tác của ABI, và sự ổn định ở mức cao.

Cập nhật: Tôi đã giới thiệu cho bạn đó là here (plugin_r2.zip). Nó đã được thực hiện trong Delphi XE, nhưng nếu bạn đang sử dụng một phiên bản cũ của delphi, bạn chỉ cần xóa các tập tin .dproj và mở tập tin .dpr cho ứng dụng chính, và .dpk cho gói.

+0

Những gì tôi cần là lưu trữ biểu mẫu, datamodules và tài nguyên bên trong BPL. Mục tiêu là tạo thêm các mô-đun cho APP chính, mà tôi cung cấp cho khách hàng hay không. Mỗi khi tôi xây dựng chính, tôi sẽ xây dựng lại các mô-đun (BPL). Phiên bản DELPHI không phải là một vấn đề tôi làm việc trong năm 2007 và có kế hoạch giữ nó trong một thời gian để mở rộng. Những gì không làm việc bây giờ là GetClass. – Jlouro

+0

Tôi đã giới thiệu cho bạn một bản demo, xem liên kết cuối cùng câu trả lời ở trên! Nếu bạn không sử dụng delphi XE, thì hãy xóa tệp DPROJ và mở tệp .dpr và nó vẫn hoạt động. –

+0

Cảm ơn DEMO, nhưng thiếu "mainFormMainUnit1.pas". – Jlouro

4

Các gói là giải pháp dễ dàng nhưng chúng có một nhược điểm lớn. Sử dụng các gói buộc các tác giả plugin không chỉ sử dụng Delphi, mà là phiên bản trình biên dịch giống như bạn làm.

Cá nhân tôi muốn phơi bày chức năng của ứng dụng thông qua một số giao diện. Điều này cho phép truy cập từ các ngôn ngữ khác ngoài Delphi.

Thông thường plugin sẽ được triển khai trong một tệp DLL và sẽ xuất một hàm mà ứng dụng sẽ gọi để chuyển vào giao diện gốc đại diện cho ứng dụng. Sau đó, plugin sẽ gọi các phương thức của giao diện đó, do đó thiết lập tương tác hai chiều.

+1

Nếu anh ta muốn trả về Datamodules và Delphi dưới dạng câu hỏi, thì lời khuyên này không hữu ích. Kể từ khi các hình thức trả lại sẽ được Delphi và phiên bản phụ thuộc anyway –

+0

Nhưng nó là một ý tưởng tốt để cảnh báo mọi người đi từ cá mập bị nhiễm nước. Như vậy, +1 cho David. –

Các vấn đề liên quan