0

我们在 C++ 项目中有一个自定义 Listview Treegrid,该项目基于此处的 Codeproject TreeGrid 示例。随着时间的推移,代码已经被广泛修改。

我需要将 c++ 项目移植到 C# Winforms。我正在考虑为 Listview 网格创建一个 c++ dll 并在 Winforms 中与它进行互操作。

我是否在要求在 Winforms 中使用非托管 Listview 控件时遇到麻烦?我应该只移植/重写 Winforms 中的列表视图吗?(我也不期待的任务)

4

2 回答 2

1

我认为最好用托管代码重写它。

互操作性通常有效,但首选托管代码是有原因的。运行时为您处理了很多事情,而且更容易维护。对于某些任务来说,跨越边界可能会有问题。例如,您还会失去代码访问安全性。这里有一些很好的信息。

如果您不这样做,那么您将始终需要一个 .NET 开发人员和一个 c++ 开发人员来维护它。

c++/native 代码本身没有什么问题,但是将两者混合在一起。我只是认为最好不要长期混合,除非你必须这样做。

也就是说,存在时间和预算限制。互操作的存在是有原因的。如果从商业角度证明绝对需要太长时间,我会撤回上述建议。

于 2012-05-17T22:05:33.170 回答
0

如果我是你,我更愿意用 C# 重写 Listview,或者寻找一个免费或付费的用 C# 编写并打算在 Winforms 中使用的 Grid。

不要忘记在完成这项工作后您必须支持代码,这可能包括修复错误和添加功能。最好确切地知道你的代码是如何工作的以及如何调试它。您还可以编写更适合您需求的 Listview。

如果您将使用此 C++ Listview 并在 Winforms 中使用它,这将非常困难。但是,如果您决定使用它,我可以想到两种选择:

  1. 在 C++/CLI 中为 Listview 创建一个包装器,它将保存对象并在 C# 中显示数据,这意味着您必须编写大量转换代码才能将数据从 Listview 移动到 C# 对象,但它应该工作。

  2. 使用 DllImport 并使用 ListView 作为数据源,我不确定您将如何准确地从中获取所有数据,但它可以防止您编写丑陋的 CLI 代码......

所以总结一下,我建议对 UI 代码使用单一语言,我选择的 UI 语言是 C#,而不是 C++。

祝你好运...

于 2012-05-17T22:23:02.607 回答