.NET GUI - C#vs C ++ / CLI

时间:2009-06-19 14:25:59

标签: c# windows user-interface c++-cli

我正在编写一个小应用程序,需要一些列表框,按钮,文本框。它将与Boost,MySQL等C ++静态库链接。该项目需要win32功能。我认为Winforms会很好(MFC和CodeJock需要太多时间)。

所以C ++ / CLI似乎非常适合这项工作。只需在GUI旁边使用标准C ++即可。然后我遇到线程,建议你用C#编写GUI。然后使用p / Invoke(慢速)或C ++ / CLI接口连接到标准C ++ DLL。

示例:http://social.msdn.microsoft.com/Forums/en-US/clr/thread/6ae877ac-07b4-4d26-8582-de475ee9a5cb

为什么呢?使用C#作为winforms GUI而不是C ++ / CLI有什么好处(它们看起来一样,命令是相同的)。使用C ++ / CLI可执行文件而不是标准C ++可执行文件有什么缺点。我可以理解跨平台兼容性是否存在问题,但是您可能根本不使用托管功能(GUI除外)。

我不明白你为什么要使用C#,然后到目前为止将其与“引擎DLL”分开。除非“引擎DLL”当然也被用于其他应用程序。

由于

6 个答案:

答案 0 :(得分:19)

我认为关于这个问题的大多数建议都围绕这样一个事实:C#只是一个比C ++ / CLI更好的创建.NET应用程序的环境。语法更清晰,工具更好 - 在Visual Studio和第三方中都是如此。您将从几乎所有人都更熟悉C#的开发人员那里获得更多更好的支持。

C ++ / CLI应用程序与标准C ++有很大不同,所有那些^和%字符我至少觉得它不是C ++。

大多数建议也来自于您希望创建.NET应用程序,而C ++ / CLI更多地用作粘合层。每当我使用C ++ / CLI时,它都是勉强的,几乎总是因为某些第三方库有许多复杂的C / C ++对象。使用C#和P / Invoke时,通常必须创建类来镜像与您正在连接的软件的C ++头文件中的结构和类。保持同步是劳动密集型的,并且容易犯错误。此外,弄清楚如何用指向结构数组结构的指针编组结构将使你的大脑融化!

我的一般建议是使用C#(或VB.NET)为您的应用程序创建尽可能多的代码。当您需要调用Win32 API和/或第三方SDK时,使用P / Invoke并且接口和参数很简单。如果不可能,请使用C ++ / CLI作为粘合层。

在团队环境中,您的开发人员会感谢您将C ++ / CLI的使用限制在绝对需要的地方。 C ++ / CLI专业知识并不常见。

答案 1 :(得分:4)

就个人而言,我喜欢C ++ / CLI,但我仍然宁愿用C#编写我的UI。

C ++ / CLI 很棒,可直接使用Win32或与遗留代码交谈,但在UI代码方面,我的喜好有点过于冗长。 C#中的WinForms UI代码很简单(大多数情况下,哈哈)。用C ++编写UI代码几乎总是很乱(只看MFC)。

为什么不在一个C#程序集中创建UI并将所有较低级别的代码放在C ++ / CLI程序集中?关于C ++ / CLI的好处是你可以创建一个C#代码可以轻松调用的托管层。然后,该托管层可以轻松地将调用转发到直接C ++或C代码的本机层。

答案 2 :(得分:2)

  

使用C#有什么好处?   为您的winforms GUI而不是   C ++ / CLI(它们看起来一样,是   命令是一样的)?

它们看起来不一样。在我看来,C#更清晰,并且有一些有用的抽象。 C#或VB.net的工具支持也非常好。

Look here for an example comparison

并且不要忘记像Lambda Expressions,LINQ,类型推断等高效的语言功能,这些功能往往会首先触及C#并尽快流入VB.net但很少找到C ++ / CLI。

答案 3 :(得分:0)

我对此感到疑惑,因此在Visual Studio 2008中,我使用C ++ / CLI作为语言创建了一个新的Windows窗体应用程序项目。它做的第一件事是抛出一个错误。所以我把它作为一个迹象表明这些东西还没有准备好使用。也许我没有给它足够的机会!

The file 'c:\source\Test\Test\Form1.h' does not
support code parsing or generation
because it is not contained within a
project that supports code.

每当我尝试打开向导创建的Form1.h文件时都会发生这种情况。

答案 4 :(得分:0)

  

我正在编写一个小应用程序,需要一些列表框,按钮,文本框。它将与Boost,MySQL等C ++静态库链接。该项目需要win32功能......

我可能会有被低估的风险,但是,如果你的大部分代码都是用C ++编写的 并使用C ++功能,用 Native C ++编写GUI并不简单。

您不必使用MFC来创建GUI。看看Qt4,他们有非常好的教程 所以你可以用几个小时开始用C ++编写GUI。

答案 5 :(得分:0)

是的,似乎大多数人自动建议使用C#而不是C ++,假设您已经了解C#或愿意花时间学习它。 我没有看到对C ++ / CLI WinForms的所有仇恨是什么。 至少如果你想要移植现有的C ++代码,它就能完成工作。至少我已经使用WinForms / CLI在现有的C ++上添加了GUI。 是的,如果我从头开始,我可能会使用C#:

1我已经知道C

2我知道使用C

进行编码会更容易,更快捷

但就像我说的,如果你已经有了C ++代码,你真的想从头开始吗?