Mar*_*ett 6 .net architecture plugins
继Jeff和Joel关于插件架构的讨论之后.
C++中的插件(使用运行时加载的dll)总是有点痛苦.你必须做很多基础工作来启用它们,然后插件也必须用C++编写,通常使用相同的编译器.COM对象和ActiveX解决了其中的一些问题,但引入了一些自己的问题.
然后添加说,一个python接口,到C++应用程序是一项大量的工作.
我是否认为用一种.Net语言编写的所有库(或程序集或任何你称之为的)都可以从另一种.Net语言中调用?并且对象可以在它们之间自动传输数据类型吗?
据推测,因为所有.Net语言也使用Winforms(或WPF)作为gui,然后让插件访问主应用程序的gui也相对简单.
很抱歉,如果这是一个相当明显的观点,我只是一个老式的C++程序员.但是通过C++/CLI重用现有C++库的难易程度使我确信C#/ .Net可能值得更多调查.
编辑 - 谢谢,我想讨论插件是否有理由去.Net.能够编写ironpython,同时让我的业务用户能够在VB中编写一个简单的插件,技术用户能够在F#中创建一些聪明的东西而不需要我做更多的工作似乎是从C++切换的一个很好的理由
我是否正确地认为用一种 .Net 语言编写的所有库(或程序集或任何你所说的东西)总是可以从另一种 .Net 语言调用?对象和数据类型可以在它们之间自动传输吗?
是的。在 .NET 中,由于 CTS(提供一组通用数据类型以供所有 .NET 兼容语言使用并确保类型兼容性)和 CLS(定义了所有 .NET 语言编译器必须遵循的一组最低标准),跨语言兼容性成为可能。必须符合,从而确保语言互操作性)。在编译期间,任何 .NET 兼容语言的源代码都会由相应的语言编译器转换为中间语言代码。由于所有 .NET 程序集(EXE 或 DLL)都作为中间语言存在,因此它们可以在它们之间进行互操作。所有 .NET 兼容语言都使用相同的数据类型,并且仅表示为 .NET 类型。因此,无论您在 C# 中使用 int 还是在 Visual Basic .NET 中使用 Integer,在 IL 中它都表示为 System.Int32。[来源]