在同一解决方案中在C#项目和C ++项目之间进行交互

时间:2011-10-20 00:00:48

标签: c# .net visual-studio-2010 visual-c++ c++-cli

我有一个用C ++ / cli编写的Windows窗体应用程序。我想用一些新的表单扩展这个应用程序,我想在一个单独的项目中用C#创建它们。

是否可以简单地将C#项目添加到具有C ++项目的解决方案中,并且两者将进行交互?通过交互,我的意思是,例如,点击c#项目中编写的表单的按钮将能够调用c ++项目中的方法。或许以不同的方式询问,C#项目中的对象是否可以引用c ++项目中的对象?如果是这样,你知道一个示例代码让我开始吗?

感谢。

2 个答案:

答案 0 :(得分:6)

是。 C ++ / CLI应用程序将能够以两种方式之一与C#应用程序连接:

如果您正在使用CLI扩展(从帖子中听起来像它),您将能够使用新的对象引用编写代码:

托管对象:System::String^ myString(在C ++中)与C#中的string myString相同 托管参考:System::String% myString相当于ref string myString

如果你想使用C ++本机类型,那么你将不得不使用P / Invoke,但这是一个完全不同的类别。对于您想要做的事情,只需添加C ++项目作为C#项目的引用,使用托管类型在C ++中编写公开可见的类,然后进行编译。然后,您的项目应该在您为C ++类选择的任何名称空间中对C#类可见。

编辑:哦,如果您需要通过C ++分配托管对象,则需要使用gcnew代替new

答案 1 :(得分:2)

这可以通过使用C ++项目编译dll,然后让C#app加载该dll然后它将能够调用其导出的函数来完成。此方法允许您的C ++代码是非托管代码。

就找到已经设置的样本而言,我只能找到一个Visual Studio 2008项目:Microsoft All-In-One Code Framework

对于visual studio 2010,以下是如何进行C ++方面的工作:How to make a dll with C++ Using Explicit PInvoke in C++