在Visual Studio Express 2012 for Windows桌面(Windows 7)中组合C++和c#项目

问题描述:

使用VS2010 express。用C#编写我认为是面向对象语言的一个很好的中间步骤。让我的代码有点重复的一件事是无法在C#中使用多个类继承。即我不能说A类继承了B类 C类。在Visual Studio Express 2012 for Windows桌面(Windows 7)中组合C++和c#项目

c#非常棒,因为您可以快速轻松地获得带有按钮文本框的窗口并拨号并运行。由于没有包含MFC库,因此在Express版本中,这不适用于C++。

现在,我想到了一个C#前端,它将参数保存到一个文件中,然后执行一个读取文件的C++,运行并保存一个文件,然后用另一个(或相同)c#后端exec阅读和播放结果。但是如果你想改变某些东西的话,总会再次执行整个序列,这会使它变得很麻烦。更不用说调试了,可能需要运行实例。

阅读Visual Studio 2012 Express的桌面通告,它指出:“您还可以将C++,C#和Visual Basic项目组合到一个单一的解决方案中,使用任何可用的编程工具轻松编写单个应用程序语言“。 http://blogs.msdn.com/b/visualstudio/archive/2012/09/12/visual-studio-express-2012-for-windows-desktop-is-here.aspx?PageIndex=3

现在我会很高兴,毕竟我不期望和不需要在这个阶段做任何wizbank的东西,即特殊的按钮功能/设计,这是更容易和MFC提供的C + +。

我的问题是:有没有人在Windows 7的Windows桌面版Express中的Visual Studio 2012中试过这个?我可以结合一个C++和一个C#项目进行交互,例如在调试时将一个项目的代码跟踪到另一个项目?有什么特别的限制吗?我的意思是,如果它的组合可执行文件只有它没有多大用处,但我期望它不止这些,但还有多少?例如,在C#中设计的对象是否可以在C++中设计一个对象,将其传递给其他对象,例如类,它们保存输入和输出或者在C++类中处理并且仍然可以在c#代码中访问以显示结果等的数据。

我在下载新的快速版本之前询问了这个问题,因为我期望它会让我回到从C#到C++的几个月后,我认为就像从Visual Basic到C一样。我不想进入所有的麻烦(我不介意真的,但它会是巨大的退后一步),以找出我不能“将”ac#前端与C++处理解决方案集成在一起。

+0

除非你正在做一些对性能至关重要的事情,或者试图与现有的C++代码进行接口,否则我会推荐完全使用C#。该语言在很多方面与C++非常接近,不会给切换带来很多麻烦。 – 2013-02-19 16:07:20

+0

目前没有接口,但它第二次我错过了多重继承。我正在做的是研究相关的,所以我期望进行调试,重复代码会使事情变得危险。这也是性能的关键。我对c#没有任何抱怨,它的速度不够快,并行性也是奇迹。它不会介意提高性能,有些东西需要5-10分钟才能在双核上运行,即使在parallel.for等等的情况下,但高效的编码是我所想的,而C++学习的成本和复杂性当然是@黑暗猎鹰 – TDo 2013-02-19 16:21:18

您有用于连接C++与C#三个选项:

  1. 的PInvoke:你在C#中指定的函数签名,并给他们指定哪些DLL他们居住在一个特性,这将是相当痛苦的,如果你需要做的传递任何复杂的类型。

  2. COM:C++ DLL将实现一个由C#代码调用的COM对象。

  3. C++/CLI:允许在单个C++项目中混合托管和非托管C++代码。与其他库的接口非常好,但至少在VS 2010中,缺乏有用的功能,如智能感知。如果你真的想走这条路,我会写三个项目:你的核心C++代码作为一个静态库,你的C++/CLI DLL来包装它,以及你的C#应用​​程序。

+0

这不像我期待的。你确定?谈到VS2012不表达2010年。那么他们在链接中结合来自不同语言的项目是什么意思?感谢您花时间回答@ Dark Falcon – TDo 2013-02-19 16:43:29

+1

您可以在一个解决方案中使用不同语言的项目。你也可以相互引用它们。例如,C#项目可以引用C++/CLI项目。这就是他们的意思。 – 2013-02-19 16:45:34

+0

好吧,我坚持使用C#和VS2010我认为。毕竟,而不是多重继承,我想instanciating顶级内的子类应该工作。我希望更多的点不会在性能上产生很大的差别,即fooA.action()与fooA.A.action()相比......我想......感谢您的帮助! – TDo 2013-02-19 17:17:20