2009-08-01 42 views
6

Theo dõi các thảo luận về kiến ​​trúc plugin của Jeff và Joel.Kiến trúc Net và plugin

Plugin trong C++ (sử dụng dll tải thời gian chạy) luôn là một chút đau. Bạn phải làm rất nhiều công việc nền tảng để kích hoạt chúng và sau đó plugin cũng phải được viết bằng C++, thường thậm chí với cùng một trình biên dịch. Các đối tượng COM và ActiveX giải quyết một số vấn đề này nhưng đã giới thiệu một số vấn đề của riêng chúng.
Sau đó, để thêm lời nói, giao diện python, vào ứng dụng C++ là một lượng lớn công việc.

Tôi có chính xác khi nghĩ rằng tất cả các thư viện (hoặc hội đồng hay bất kỳ thư viện nào bạn gọi) được viết bằng một ngôn ngữ .Net luôn có thể được gọi từ ngôn ngữ khác .Net? Và có thể đối tượng một kiểu dữ liệu được tự động chuyển giữa chúng?

Có lẽ vì tất cả ngôn ngữ Net cũng sử dụng Winforms (hoặc WPF) cho gui, sau đó cho phép truy cập plugin vào gui của ứng dụng chính cũng tương đối đơn giản.

Xin lỗi nếu đây là một điểm khá rõ ràng, tôi chỉ là một lập trình viên C++ thời trang cũ. Nhưng việc dễ sử dụng lại các thư viện C++ hiện có thông qua C++/CLI đã thuyết phục tôi rằng C# /. Net có thể đáng được điều tra nhiều hơn.

Chỉnh sửa - cảm ơn, tôi đang tìm cách thảo luận nếu plugin là lý do để đi .Net. Có thể viết được phần mềm giả trong khi người dùng doanh nghiệp của tôi có thể viết một plugin đơn giản trong VB và người dùng kỹ thuật có thể tạo ra một thứ gì đó thông minh trong F # mà không cần tôi làm thêm bất kỳ công việc nào có vẻ là một lý do tốt để chuyển từ C++

+0

Cảm ơn bạn đã thảo luận thêm về việc các plugin có phải là lợi thế chính của .Net –

Trả lời

3

Tôi thích hợp trong suy nghĩ rằng tất cả các thư viện (hoặc lắp ráp hoặc bất cứ điều gì bạn gọi cho họ) được viết bằng một ngôn ngữ .Net luôn có thể được gọi từ ngôn ngữ khác .Net? Và có thể đối tượng một kiểu dữ liệu được tự động chuyển giữa chúng?

Có. Trong .NET, khả năng tương thích giữa các ngôn ngữ có thể là do CTS (Cung cấp một tập hợp các kiểu dữ liệu chung để sử dụng trên tất cả các ngôn ngữ tuân thủ .NET và đảm bảo khả năng tương thích kiểu) và CLS (Định nghĩa một bộ tiêu chuẩn tối thiểu mà tất cả các trình biên dịch ngôn ngữ .NET) phải tuân thủ và đảm bảo khả năng tương tác ngôn ngữ). Trong quá trình biên dịch, mã nguồn của bất kỳ ngôn ngữ tuân thủ .NET nào được chuyển thành mã Ngôn ngữ trung gian bằng trình biên dịch ngôn ngữ tương ứng. Vì tất cả các assembly .NET (EXE hoặc DLL) tồn tại dưới dạng ngôn ngữ trung gian, chúng có thể tương tác giữa chúng. Tất cả các ngôn ngữ tuân thủ .NET đều sử dụng cùng kiểu dữ liệu và chỉ được thể hiện dưới dạng các kiểu .NET. Vì vậy cho dù bạn đang sử dụng int trong C# hoặc Integer trong Visual Basic .NET, trong IL nó được biểu diễn dưới dạng System.Int32. [Source]

+0

+1 nhận xét tuyệt vời về hoạt động của IL. Tôi đã không thực sự nghĩ của người dùng cuối bằng văn bản bổ sung với một cái gì đó khác hơn là C#. – IAbstract

0

với plugin dưới .Net không phải là khả năng gọi mã từ dll của plugin (và interop với nó), nhưng vấn đề an toàn. Những người có thể được giải quyết là tốt, bạn có thể xem ở đây (những mẫu được liên kết ở đó cũng nên trình bày một máy chủ + plugin đơn giản) How to create a Plugin Model in .NET with Sandbox?

Và vì khả năng tương tác giữa các ngôn ngữ .Net - không có vấn đề gì với điều đó.
Chia sẻ gui - Tôi đã làm điều này với Winforms, và nó không phải là rất khó, mặc dù tôi không biết nếu nó sẽ được cũng dễ dàng theo WPF, tôi đã không bao giờ thử nó mặc dù.

0

Yeah, bạn có thể đạt được tất cả trong số họ qua Reflection

có bài viết về C# plug-in cấu trúc như this one

1

Nếu bạn đang tìm thư viện trình cắm.NET, có một vài tùy chọn tôi biết:

Cả hai đều là mã nguồn mở, vì vậy bạn có thể thấy họ đã tạo ra môi trường trình cắm thêm như thế nào.

+0

cảm ơn cho mẹo Mono !!! – IAbstract