2009-08-01 77 views
6

繼Jeff和Joel關於插件體系結構的討論之後。.Net和插件體系結構

C++中的插件(使用運行時加載的dll)總是有點痛苦。你必須做很多基礎工作才能啓用它們,然後插件也必須用C++編寫,通常甚至使用相同的編譯器。 COM對象和ActiveX解決了一些這些問題,但引入了一些自己的問題。
然後向C++應用程序添加一個python接口是一項大量的工作。

我正確地認爲用一種.Net語言編寫的所有庫(或程序集或任何你稱之爲它們)總是可以從另一個.Net語言調用嗎?數據類型是否可以自動在它們之間傳輸?

大概因爲所有.Net語言也使用WinForms(或WPF)作爲gui,所以給予主應用程序gui的插件訪問也相對簡單。

對不起,如果這是一個相當明顯的一點,我只是一個老式的C++程序員。但通過C++/CLI重用現有C++庫的容易性使我相信C#/ .Net可能值得更多的調查。

編輯 - 謝謝,我期待討論插件是否是去.Net的原因。能夠編寫ironpython,同時讓我的商業用戶能夠在VB中編寫一個簡單的插件,並且技術用戶能夠在F#中巧妙地編寫一些東西,而不需要我做更多的工作似乎是從C++切換的一個很好的理由

+0

感謝這是一個關於插件是否是.IL – 2009-08-02 00:10:38

回答

3

我是在想糾正所有庫(或組件或任何你打電話給他們)用.Net語言編寫的文檔總是可以從另一個.Net語言中調用?數據類型是否可以自動在它們之間傳輸?

是的。在.NET中,跨語言兼容性是可能的,因爲CTS(爲所有.NET兼容語言提供一組通用數據類型,並確保類型兼容性)和CLS(定義了一組最低標準,所有.NET語言編譯器必須符合,從而確保語言的互操作性)。在編譯過程中,任何.NET兼容語言的源代碼都會被相應的語言編譯器轉換爲中間語言代碼。由於所有.NET程序集(EXE或DLL)都作爲中間語言存在,因此它們可以在它們之間進行互操作。所有.NET兼容語言都使用相同的數據類型,僅表示爲.NET類型。因此,無論您是在C#中使用int還是在Visual Basic .NET中使用Integer,都在IL中表示爲System.Int32。 [Source]

+0

+1關於IL工作的重要優點的討論。我沒有真正想過最終用戶使用C#之外的其他軟件編寫插件。 – IAbstract 2010-01-26 04:38:14

0

主要問題在.Net下插件不能從插件的dll中調用代碼(並與它互操作),但安全問題。這些也可以解決,你可以看看這裏(鏈接那裏的樣本也應該提供一個非常簡單的主機+插件)How to create a Plugin Model in .NET with Sandbox?

而對於.Net語言之間的互操作性 - 這是沒有問題的。
共享gui - 我已經使用Winforms完成了這個任務,雖然我不知道在WPF下它是否也很容易,但我從來沒有嘗試過。

1

如果您正在尋找插件庫,NET,有一對夫婦的選擇我所知道的:

兩者都是開源的,所以你可以看到他們如何創建插件環境。

+0

感謝單聲道提示! – IAbstract 2010-01-26 04:38:45