【问题标题】:Effort estimation: using C / Win32 or learning C# / .NET努力估算:使用C/Win32或学习C#/.NET
【发布时间】:2009-06-24 10:57:00
【问题描述】:

我打算编写一个小应用程序来解决个人问题,并可能让一些同事的生活更轻松。这是我所拥有的:

  • 10年以上C领域经验
  • 从 Win3.1 到 2000 天,在 C 中针对 Win16/32 API 进行编程方面的丰富经验。
  • 我自己编写的 C 库已经完成了应用程序的 75%。

应用程序应该做什么:

  • 打开一个二进制文件,将其输入到上述库中。
  • 获取生成的文本输出并将其输入到新的 Excel 工作簿中。
  • 应用一些格式。
  • 与 Windows 环境完美集成(“打开方式...”中的可用性,使用注册表等记住一些内容)
  • (可能稍后)在将 CSV 数据提供给 Excel 之前,通过查找 XML 文件中某些值的含义来解析它。

除了 XML 解析部分,在 C/Win32 中包含 COM / Office 自动化之前,我已经完成了所有这些工作。涉及大量样板代码,但它是可行的,结果将是一个非常小的应用程序,无需安装程序。

那么为什么还要考虑 C# / .Net?

  • 没有解析 XML 的经验
  • 承诺减少用于 Windows 和 Excel 的样板代码(是的,我已经使用 OWL、MFC、ATL 等完成了 C++,但我不再去那里 - 不是免费/有趣)
  • 由于我也有使用 C++、VB(不是 .Net)和一点 Java/Objective-C 的经验,我想学习 C# 将全部与 .Net 库有关,而不是实际上与语言有关。

到目前为止我的考虑:

  • 学习 .NET 可能会很有趣,并且可能会在更现代的环境中减少代码/第一步。
  • 坚持我所知道的将在工作量和功能方面产生可预测的结果(可选的 XML 内容除外)
  • VB 一开始看起来很棒,直到大约 80% 完成的项目,然后痛苦开始,用 C 编写 DLL 编码。我担心如果我选择 .Net,历史可能会重演。

我的主要目标是功能。努力是一个问题。 XML 解析是可选的。

请指教。

更新:我忘记明确提及的一件事是,我还担心该工具能否轻松部署给我的同事。使用 Win32,我很确定我可以提供一个小于 1Mb 的 EXE 文件,可以轻松地通过电子邮件发送,并且不需要安装。 .Net 没有那么多。我可以在 Visual Studio Express 中创建必要的 MSI 或其他任何东西(免费)还是需要第 3 方工具?

【问题讨论】:

  • 我不确定在 Visual Studio Express 中创建 msi,但有免费的替代方法可以让您创建 msi。对于许多应用程序,您甚至不需要 msi 文件,您只需复制可执行文件本身,可能还包括应用程序使用的任何自定义 dll 文件。

标签: c# .net c xml winapi


【解决方案1】:

由于其他人已基本涵盖了您的问题,因此我想快速评论一下您的考虑:

  • 学习 .NET 可能会很有趣,并且可能会在更现代的环境中减少代码/第一步。

完全同意。这绝对很有趣,而且通常它确实会减少代码。您现在所做的投资肯定会使您在未来的项目中受益。用 .Net 编程比用 C 编程要快得多。不仅更容易,而且更安全。您与 C 中常见的许多编程错误隔离开来,这些错误主要与内存管理不善有关。您还可以获得一个非常完整的托管 API 来执行构建您自己的框架通常需要做的事情。

  • 坚持我所知道的将在工作量和功能方面产生可预测的结果(可选的 XML 内容除外)

因此你犹豫不决。 :-)

  • VB 一开始看起来很棒,直到完成了大约 80% 的项目,然后痛苦开始,用 C 编写 DLL 编码。我担心如果我选择 .Net,历史可能会重演。我的主要目标是功能。努力是一个问题。 XML 解析是可选的。

.Net 与 VB 完全不同。 .Net 支持大多数您在 VB 中无法完成或至少无法轻松完成的事情。例如,在 .Net 中构建 Windows 服务是一件轻而易举的事。 Socket 编程也受支持,但很少有理由自己动手,因为您有大量的 .Net 通信 API。您拥有 Web 服务、.Net Remoting、MSMQ 管理以及最近的 WCF。 .Net 支持正确的多线程,这与 VB 中的白痴公寓模型不同。如果你真的需要去低级,你也可以在 C# 中使用指针,在不安全的代码块中,尽管我从不建议这样做。

如果你真的需要用 C 来做事情,那么集成也相对容易。您可以创建 COM 对象并使用互操作从 .Net 中使用它们。您还可以使用 DllImport 直接与普通 ol' dll 交互。使用www.pinvoke.net 更容易。

当我在 VB 中进行开发时,有时我还不得不回到 C++ 来做一些我在 VB 中无法做到的事情。自从我开始在 .Net 中编程以来,我需要回到 C++ 的唯一极其罕见的情况是,当我需要使用使用类型的遗留 COM 组件时,我很难通过互操作进行编组。我不会担心历史会重演。

【讨论】:

  • 我喜欢所有答案,并对速度和质量感到惊讶。但是,当您确定并解决了我的主要问题时,您的答案最接近我正在寻找的内容。谢谢!
【解决方案2】:

如果您使用 COM,您可能有兴趣使用 C# 4.0 而不是早期版本 - 缺点是它仅处于测试阶段。但基本上,由于各种原因,它使 COM 的东西变得不那么难看。

我希望现在有大量用于 XML 解析的优秀 C 库。我希望主要的好处实际上是获得的知识。我怀疑您实际上会为 this 项目更快地生成代码,但下一个可能会快很多。

你对学习新东西有多关心?

【讨论】:

  • 好问题。实际上我很在意,但我可以花在这个项目上的时间可能仅限于每天一个小时。因此,如果我想在今年内获得可共享的结果……在做出决定之前,我肯定会从 COM 角度研究 C#4.0。谢谢!
【解决方案3】:

这听起来像是学习 C# 和 .NET 的理想项目。

您知道大部分需要做的事情,因此您可以使用它来获得对 C# 和 .NET 的基本理解,然后您可以将其应用于您需要学习的内容。

正如 Rune 所说,时间尺度可能是一个关键驱动因素。如果这是您急需的东西,那么用 C 编码并直接使用 win32 可能就是答案。

对不起,我不能更确定。

【讨论】:

  • 驱动是:只要该工具不存在,我必须通过命令行程序调用库,对文本输出进行一些搜索和替换,将其导入Excel,应用一些格式化和公式,最后手动翻译/查找一些值。二进制文件是一个跟踪文件。 Excel-Sheet 是我用来分析记录的通信(自动过滤器等)的工具。因此,只要该应用程序不存在,每次客户遇到问题时,我都必须执行这种令人麻木的手动操作。
【解决方案4】:

我认为你应该使用 C#。根据您的经验,学习曲线不会太陡峭。代码最终会比使用 C/Win32 可能更干净(而且更少)。 使用带有 [DllImport] 属性的现有 C 库可能没有问题。

【讨论】:

  • 库的代码很简单,可能在 3-4 小时内用 C# 重写。价值在于阅读我通过采访创建者并为其编写规范收集的二进制文件所需的知识。
【解决方案5】:

这取决于。 :-) 这取决于您是想快速完成这项工作还是想学习新东西。这取决于您是唯一的代码维护者,还是其他人将来会维护它。这取决于您的 xml 处理的复杂程度以及 COM 自动化的复杂程度。

如果你在 C 中比在 C# 中做,你可能会更快地获得一个工作应用程序。既是因为您已经拥有了很多所需的东西,又因为您对 C 非常了解。

但这个项目听起来很适合 C# 和 .Net。 .Net 对 XML 和 COM 互操作有很好的支持,在 C# 中很容易但很笨拙(下一个版本会更好!)。因此,如果您有兴趣学习 C# 和 .Net,这将是一个很好的项目。

我肯定会在 .Net 和 C# 中执行此操作(但我有偏见)。使用 .Net 可能会使代码更易于阅读和维护,而且很可能更易于编写。所以如果你有兴趣学习 C#,我建议你去学习!

编辑: 如果您在.Net 中编写可执行文件,您会担心它的大小。我怀疑这将是一个问题,因为您将用于此类项目的大多数库(如果不是全部的话)都已经安装在您的计算机上。 1 Mb 对于 .Net 可执行文件来说是相当大的,对于大型项目来说是事件。

【讨论】:

  • 关于维护的事情很重要。可能会继承代码的人正在使用 .Net 和 Delphi 来处理旧的东西。
【解决方案6】:

关于安装的简短通知。 .NET 是默认的 xcopy-able,因此您不需要安装程序即可使用该 exe。将其邮寄(或与 .NET 框架的下一个版本一起使用,可选择将其保留在网络共享上)

【讨论】:

    【解决方案7】:

    您可以考虑构建一个使用 C++/CLI 和 C# 的混合系统。 C++/CLI 在两者之间提供了一个很好的桥梁,让您可以轻松地在托管和非托管世界之间分割系统的不同部分。

    不确定安装项目是否包含在 Visual Studio 的免费版本中。但是您可以使用 clickonce(包含在框架中)或 WIX(基于开源 XML 的 msi 创建工具)。

    【讨论】:

      【解决方案8】:

      学习 C# 都是关于 .Net 库的,而不是关于语言的

      不,你需要学习很多关于语言的东西(委托、事件、泛型......),而且它是面向对象的,它自己管理内存,是的,没有指针:)

      无论如何,C# 和 .NET 都很棒,您只需要努力加快速度即可

      【讨论】:

      • Objective-C 中的委托,C++/STL 中的泛型...抱歉,我没有提供整个背景。大约 15 年前,我在 DOS 上使用 Object (Turbo) Pascal 学习编程,并使用 x86 Assembler 玩了一点,然后转向 C++/OWL,然后才进入 C。VB 发生得更晚......我还年轻,需要钱。 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多