代码之家  ›  专栏  ›  技术社区  ›  J. Polfer

在.NET中使用C++类

  •  1
  • J. Polfer  · 技术社区  · 14 年前

    我有一个类,我用C++编写了一个代码库,它将在Linux命令行中运行。他们主要使用STL,而不是语言的奇特特性。他们已经测试过了,而且还在工作。

    我需要为.NET框架编写一个GUI应用程序,它使用我在这些类中编写的逻辑来完成工作,但是运行在Windows上。Windows应用程序的一个关键要求是它的行为 确切地 就像Linux应用程序一样。因此,我想在两个代码库之间共享代码。

    所以,我想将它们(或者说是)导入到一个新的代码库中,并保持两者之间的更改同步。理想情况下,我想在VB.NET中编写我的.NET文档,因为我更熟悉它,但是我愿意将它转换成C或C++来进行.NET开发。

    我的问题是, 如何在.NET项目中使用那些C++类(以最少的更改)? 这是可能的吗?我可以在.NET中创建库吗?

    注意:我的.NET体验有限,所以如果这是一个新手问题,我很抱歉。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Harper Shelby damiankolasa    14 年前

    是的,您可以在.NET应用程序中使用C++代码(只要它不依赖于Linux特定的功能)。C++/CLI是C++的一个超集,提供对.NET托管类和其他特征的访问。使用现有代码,将其构建为一个dll(如果可以,可以托管,如果不能托管),然后创建调用它的GUI部件。

        2
  •  1
  •   Robaticus    14 年前

    您可能无法将其简单地移植到等效的C库中。您可能需要考虑托管C++来创建一个可以调用的引用程序集。或者,如果有一个包含此库的Windows DLL,则可以使用interop从C程序调用代码。

        3
  •  1
  •   Kate Gregory    14 年前

    如果您已经很好地构建了这一体系结构,因此您的逻辑位于相对较少的不关心GUI的函数中,那么我建议在您可以从GUI调用的DLL中构建逻辑。

    一种方法是公开一组“extern c”函数,这些函数采用相对简单的参数类型(例如int和字符串,而不是继承自其他结构的大型结构等),然后您可以轻松地使用p/invoke(也称为dllimport)直接从vb.net代码调用该代码。同时,您的Unix代码也可以在相同的代码库中调用相同的函数。没有叉车。

    如果您需要传递更复杂的参数类型,那么您可能希望在C++/CLI中编写UI(因为它可以只插入标题并知道类型),或者(因为设计器的故事对于C++/CLI非常可悲)在VB.NET中编写UI,并添加对调用逻辑的包装器C++/CLI组件的引用。在这两种情况下,如果使您的生活更简单,函数就不必是“extern c”。

    无论哪种方式,不要将所有的业务逻辑复制到一个新的VB.NET或C++或C++/CLI文件中,并向前维护分叉代码。你会更高兴保持一个共同的核心并与之互操作。