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

本文关键字:项目 之间 交互 c++ 解决方案 同一个 | 更新日期: 2023-09-27 18:11:40

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

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

谢谢。

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

是。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

这可以通过用c++项目编译一个dll来完成,然后让c#应用程序加载该dll,然后它将能够调用其导出的函数。这个方法允许你的c++代码成为非托管代码。

至于找到一个已经设置好的示例,我只能找到一个Visual Studio 2008项目:Microsoft All-In-One Code Framework

对于visual studio 2010,这里是如何做c++端:如何用c++创建一个dll在c++中使用显式PInvoke