从使用C++编写的桌面应用程序转换为基于Web的应用程序

Kar*_*rim 5 c# c++ python dll web-based

我们有一个用C++编写的成熟的Windows桌面应用程序.应用程序的GUI位于Windows DLL的顶部,它完成GUI的大部分工作(它是引擎的一种).它也是用C++编写的.我们正在考虑将Windows应用程序转换为基于Web的应用程序,原因有多种.

我想避免的是必须在C++中为这个基于Web的应用程序编写CGI.也就是说,我宁愿拥有像Python或.NET语言这样的4G语言的强大功能来创建这个应用程序的基于Web的版本.

所以,问题是:鉴于我需要在后端使用C++ DLL来完成应用程序的工作,你会建议在用户的浏览器和C++ dll之间使用什么技术堆栈?我们可以假设Web服务器将是Windows.

一些选择:

  1. 在Windows DLL的顶部写一个COM层,然后可以通过.NET访问并使用ASP.NET作为UI
  2. 直接从.NET访问导出DLL接口,并使用ASP.NET作为UI.
  3. 编写一个包装Windows DLL的自定义Python库,以便可以编写其余的代码.
  4. 使用C++和基于C++的MVC框架(如Wt)编写CGI

关注:

  • 如果可以避免的话,我宁愿不使用C++作为Web框架 - 我认为像Python和C#这样的语言在开发时间方面更加强大和高效.
  • 我担心我的混合托管和非托管代码与.NET解决方案之一,我要求许多难以调试的小问题(纯粹的轶事证据)
  • 使用Python层也是如此.任何稍微偏离常规路线的东西都让我担心,因为如果这是一个可行的长期解决方案,我没有太多证据.

Ian*_*ose 10

另请参见可以将大量现有应用程序移植到Web上吗?怎么样?

对不起,没有好的解决方案,只是不那么糟糕的....

首先,当你已经为windows开发我假设你习惯使用Microsoft开发工具时,我不会给来自unix(或Mac)的桌面应用程序给出相同的答案.

一些随机的想法和指针.

  • 我会使用Asp.net最有可能的Aps.net MVC.
  • 我会尝试在一些很好的高级.net类中包装C++类,也许使用Managed C++/CLI.
  • 使用COM很可能在C++方面做了很多工作,并且不会使.NET容易,所以我会避免使用COM来支持托管C++或pinvoke(但是如果你已经在C++端使用COM了,那么它是一个选项,只要您使用VB6可以处理的COM子集).
  • .NET无法访问任何托管C++对象,但它可以使用Pinvoke访问简单的C函数,因此无论你做什么,在C++站点上都需要某种桥接层.
  • 看看你是否可以使用Silverlight而不是网络,如果你能够(安装问题等),它将为你节省大量的开发时间.(并且让你也可以定位微软手机)
  • 检查"端口到网络"的业务案例是否非常强大,这将比您想象的要花费更长的时间!,是否为您的客户托管终端服务器等?
  • 考虑线程和多用户访问,例如,你的dll是否认为它只被一个用户使用?
  • 仅仅因为您正在开发新的Web版本,即使您已经发布了Web版本,您仍然会让客户要求更改桌面版本.我在过去发现,现有客户并不总是希望转移到网络应用程序.

(对不起,我不知道是否匹配Python,但是如果你还没有相关的技能,我会说你已经知道微软调试器等,坚持使用Microsoft堆栈)


(我认为将复杂的应用程序移植到网络上是一个非常大的痛苦,最好尽可能避免痛苦,但有时你没有选择,只需要尽量减少痛苦.如果你从未在大型应用程序中工作过移植到网络的过程(通常是多年的工作),你只是不知道你在为自己做什么!)