努力估算:使用C / Win32或学习C#/ .NET

时间:2009-06-24 10:57:01

标签: c# .net c xml winapi

我打算写一个小应用程序来刮擦个人痒,可能会让一些同事的生活更轻松。这就是我所拥有的:

  • 10年以上的C
  • 经验
  • 从Win3.1到2000天,在C语言的Win16 / 32 API编程方面拥有丰富的经验。
  • 我自己编写的C库已经占应用程序应该执行的大约75%。

申请应该做什么:

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

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

那么为什么要考虑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我很确定我可以提出一个EXE文件< 1Mb,可以轻松通过电子邮件发送,不需要安装。与.Net没那么多。我可以在Visual Studio Express (免费)中创建必要的MSI或其他内容,还是需要第三方工具?

8 个答案:

答案 0 :(得分:4)

正如其他人主要提到您的问题一样,我想快速评论一下您的注意事项:

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

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

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

因此你的犹豫不决。 : - )

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

.Net与VB完全不同。大多数你无法用VB做的事情,或者至少很容易做到的事情都得到了.Net的支持。例如,Windows服务很容易构建.Net。也支持套接字编程,但是你自己做的很少,因为你有大量的.Net通信API。你有网络服务,.Net Remoting,MSMQ管理,以及最近的WCF。与.Net中的愚蠢公寓模型不同,.Net支持适当的多线程。如果你真的需要进入低级别,你也可以在不安全的代码块中使用C#中的指针,即使我从不建议这样做。

如果你真的需要用C做事,那么整合也相对容易。您可以创建COM对象并使用互操作从.Net处理它们。您还可以使用DllImport直接与普通的dll进行交互。使用www.pinvoke.net可以更轻松。

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

答案 1 :(得分:3)

如果你正在使用COM,你可能会对使用C#4.0而不是早期版本感兴趣 - 缺点是它只是在测试阶段。但基本上它会因为各种原因使COM内容变得不那么难看。

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

你关心学习新东西多少钱?

答案 2 :(得分:2)

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

你知道你需要做的大部分事情,所以你可以用它来获得对C#和&然后,您可以将.NET应用于您需要学习的内容。

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

抱歉,我无法确定。

答案 3 :(得分:1)

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

如果你在C语言中使用C#而不是在C#中,你可能会更快地获得一个有效的应用程序。两者都是因为你已经有很多需要的东西,因为你知道C井。

但是这个项目听起来像是C#和.Net的良好匹配。 .Net非常支持XML和COM互操作在C#中很简单但很笨拙(在下一个版本中要好得多!)。因此,如果您有兴趣学习C#和.Net,这将是一个很好的项目。

我肯定会在.Net和C#中做到这一点(但我有偏见)。使用.Net可能会导致代码更易于阅读和维护,并且最容易编写。所以,如果你有兴趣学习C#,我会建议你去学习它!

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

  

学习C#将全部是关于.Net库而不是实际上关于语言

没有很多东西你需要了解语言(委托,事件,泛型...),它也是面向对象的,它自己管理内存,是没有指针:)

无论如何,C#和.NET都很棒你所需要的是努力加快速度