Câu hỏi đầu tiên tôi sẽ hỏi là bạn có cần plugin để truy cập giao diện người dùng của ứng dụng máy chủ lưu trữ hay thêm bất kỳ phần tử giao diện người dùng nào của riêng mình không? Hoặc các plugin có bị giới hạn truy vấn và/hoặc cung cấp dữ liệu cho ứng dụng máy chủ của bạn không?
Cách thứ hai dễ dàng hơn nhiều và mở ra hai khả năng. Những người khác đã đề cập đến DLL, đó là cách đầu tiên để đi. Một số cảnh báo nhất định áp dụng - nói chung bạn nên giao tiếp với dll chỉ sử dụng các loại dữ liệu được sử dụng trong Windows API. Theo cách này, bạn có thể chắc chắn rằng các plugin DLL sẽ hiểu các kiểu dữ liệu của bạn, bất kể ngôn ngữ/trình biên dịch chúng được tạo ra. (Ví dụ, sử dụng PChars, chứ không phải các chuỗi. Không phải là quy tắc chuyển các lớp Delphi như TStream sang một DLL. Điều này sẽ xuất hiện để làm việc trong một số trường hợp, nhưng không an toàn nói chung, bởi vì ngay cả khi DLL được biên dịch trong Delphi, nó có thể là một phiên bản khác của trình biên dịch, với một ý tưởng hơi khác về TStream là gì). Google sử dụng các tệp DLL trong Delphi và bạn sẽ tìm thấy nhiều mẹo hơn.
Một cách khác chưa được đề cập đến là bật tính năng tạo tập lệnh trong ứng dụng của bạn. Có rất nhiều công cụ tạo kịch bản bên thứ ba rất có khả năng, cả thương mại và miễn phí, và hầu hết trong số chúng cho phép bạn trao đổi các đối tượng Delphi bằng kịch bản. Một số thư viện này chỉ hỗ trợ Pascal làm ngôn ngữ kịch bản, những thư viện khác sẽ cho phép bạn sử dụng Cơ bản (có lẽ tốt hơn cho người dùng mới bắt đầu) hoặc các ngôn ngữ khác. Xem ví dụ RemObjects Pascal Script (miễn phí) tại http://www.remobjects.com/free.aspx.
Giải pháp kịch bản yêu thích của tôi tại thời điểm này là Python cho Delphi (P4D, cũng miễn phí) từ http://mmm-experts.com/Products.aspx?ProductID=3 Nó có thể giao diện đẹp mắt với các lớp của bạn qua RTTI, và cho phép bạn thực thi mã Python trong ứng dụng Delphi của bạn, cũng như sử dụng Delphi các lớp trong các kịch bản Python. Do sự phổ biến của Python, đây có thể là một giải pháp khả thi nếu bạn muốn thu hút các nhà phát triển đến dự án của bạn. Tuy nhiên, mọi người dùng sẽ cần cài đặt bản phân phối Python.
Dường như với tôi rằng rào cản truy cập, từ quan điểm của các nhà văn plugin tiềm năng, thấp hơn nếu bạn sử dụng kịch bản hơn nếu bạn chọn các tệp DLL.
Bây giờ, quay lại câu hỏi ban đầu của tôi: mọi thứ trở nên phức tạp hơn nhiều nếu bạn cần plugin tương tác với giao diện người dùng của mình, ví dụ: bằng cách đặt các điều khiển trên đó. Nói chung, DLL không thể được sử dụng để làm điều này. Cách xử phạt Borland/CodeGear là sử dụng các gói (BPL). Với BPL, bạn có thể truy cập và khởi tạo các lớp được cung cấp bởi một plugin như thể chúng được khai báo trong ứng dụng máy chủ của bạn. Việc nắm bắt được, tất cả các BPL phải được biên dịch với cùng một phiên bản chính xác và xây dựng Delphi mà ứng dụng chính của bạn là. Theo tôi, điều này làm cho các gói hoàn toàn không thực tế, vì thật khó để mong đợi rằng tất cả các nhà văn tiềm năng trên toàn thế giới sẽ sử dụng cùng một phiên bản của Delphi mà bạn đang có. Một cạm bẫy lớn.
Để giải quyết vấn đề này, tôi đã thử nghiệm một cách tiếp cận khác: tiếp tục sử dụng DLL và phát triển cú pháp cho plugin để mô tả giao diện người dùng cần, sau đó tự tạo giao diện người dùng trong ứng dụng máy chủ. (XML là một cách thuận tiện để thể hiện giao diện người dùng, vì bạn có khái niệm về nuôi dạy con/làm tổ miễn phí.) Cú pháp mô tả giao diện người dùng có thể bao gồm gọi lại đến DLL được kích hoạt khi nội dung hoặc trạng thái của điều khiển thay đổi. Phương pháp này sẽ hạn chế các plugin cho tập hợp các điều khiển VCL mà ứng dụng của bạn đã sử dụng hoặc đã đăng ký. Và nó không phải là một công việc một-nighter, trong khi BPL chắc chắn là.
Google cho "khung plugin Delphi", quá. Có một số giải pháp làm sẵn, nhưng theo như tôi biết họ thường sử dụng BPL, với tính hữu dụng hạn chế của họ.
Xem thêm lời giải thích trong câu trả lời của tôi – Serguzest