【问题标题】:Combining C# and C++ in VisualStudio solution在 Visual Studio 解决方案中结合 C# 和 C++
【发布时间】:2013-03-04 08:25:10
【问题描述】:

我有一个用 C++ 编写的相当复杂的项目,我正在尝试将其转换为 C# 解决方案。我认为将核心留在 C++ 中作为 VC++ 类库是最容易的。

在开始之前,我尝试以这种方式编写简单的 C++ 类并在 C# 项目中使用它。我遇到的第一个问题是 STL(在核心 STL 中,使用了 Boost 和 QT):我无法将 C# List 作为 std::list 传递给 C++ 方法。

有什么简单的方法可以在 C# 中使用带有 STL、Boos 和 QT 的 C++ 代码,或者将其转换为 C# 更容易?

【问题讨论】:

    标签: c# c++ qt boost stl


    【解决方案1】:

    无法将 C++ 转换为 C#。而且也没有理由这样做。您可以做一些事情:

    1) 用 C# 重写 GUI

    2) 用 C++/CLI 包装 C++ 类并在 C# 中使用它们

    3) 如果您的应用程序主要是 Gui 而背后的逻辑不是太复杂,您可以在 unsafe 块中使用 C# 中的 C++ 代码部分。

    绝对不应该将c++代码逐行转换成c#。

    【讨论】:

    • 转换是指复制所有内容,然后将所有 std/stl/boost/qt 类更改为类似的 C# 类等等。
    • @Ari 我明白,这是你不能简单地做的事情。我给你的 3 条建议是你将 c++ “转换”为 c# 的最佳方式
    • 为什么不能在C#中逐层重写应用程序?当然,C#容器不能作为C++容器类的完全复制品,也不能逐行传递,但逐类(或逐层)应该是可以的。
    • @ArneMertz 重写未转换。当然你可以重写整个代码。但是 OP 说,这个项目非常复杂,这意味着他在完成重写之前不能使用/出售它。这就是为什么最佳实践是创建新的 c# gui 并将现有 c++ 代码包装在 c++/cli 中,然后逐步将逻辑从 c++ 重写为 c#
    • @VladL 我认为这正是他所说的“转换”的意思——在不改变宏伟设计和架构的情况下重写必要的类,保留各个类的职责。而且由于他想保留 C++ 核心,他可能只转换 gui,并且可能会转换一两层,因为他认为合适。我认为 C++/CLI 包装器就是他所说的“VC++ 类库”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多