草庐IT

c# - Visual Studio 6 中 C++ 项目的推荐迁移策略

coder 2023-11-13 原文

对于使用 Visual Studio 6 用 C++ 编写的大型应用程序,进入现代时代的最佳方式是什么?

我想采用增量方法,我们慢慢地移动部分代码并将新功能编写到 C# 中,然后将其编译成可以从遗留应用程序引用的库或 dll。

这是可能的,最好的方法是什么?

编辑 :在这一点上,我们仅限于 Express 版本,我认为这些版本不允许使用我们当前应用程序中大量使用的 MFC 库。它也是一个相当大的应用程序,具有很多硬件依赖性,因此我认为不会进行大规模迁移。

编辑 2 :我们已经研究过用 C# 编写 COM 包装的组件,但没有 COM 经验,这既可怕又复杂。是否可以生成一个带有直接 C 接口(interface)的 C# dll,其中隐藏了所有托管的优点?还是 COM 是必要的邪恶?

最佳答案

面对同样的任务,我的策略是这样的:

  • 确定我们希望通过转向 2010 年的发展获得什么——它可能是
  • 改进的质量保证:单元测试、模拟是现代开发工具的一部分
  • 更流畅的用户界面:WPF 提供了现代的外观和感觉。
  • 生产力:在某些领域,.NET 开发比 C++ 开发更具生产力
  • 支持:通过改进和错误修正支持新工具。
  • 确定系统的哪些部分不会从迁移到 C# 中获益:
  • 硬件访问,低级算法代码
  • 几乎大多数定制的非 UI 工作代码 - 如果它已经工作没有意义将其扔掉
  • 确定系统的哪些部分需要迁移到 c#。对于这些部分,请确保 C++ 中的当前实现是解耦和模块化的,以便可以换出这些部分。如果应用程序是一个整体,那么将需要大量的工作来重构应用程序,以便它可以被分解并选择在 c# 中重新实现的部分。 (可以不进行任何重构,而只专注于在 c# 中实现新的应用程序功能。)
  • 既然您已经确定了哪些部分将保留在 C++ 中,哪些部分将在 c# 中实现,(或者只是规定新功能在 c# 中),那么重点将转向如何将 c# 和 c++ 集成到单个解决方案中
  • 使用 COM 包装器 - 如果您现有的 C++ 项目很好地利用了 OO,这通常并不像看起来那么困难。使用 MSVC 6,您可以使用 ATL 类将您的类公开为 COM 组件。
  • 直接集成原生和c#代码。集成“遗留”编译代码需要一个中间 DLL - 见 here详情。

  • 混合 MFC UI 和 c# UI 可能无法实现,也不建议这样做,因为它会产生两种不同风格(1990 年代灰色和 2010 氛围)的 UI 混合。专注于实现增量迁移更简单,例如在 C# 中实现新的应用程序代码并从 native C++ 代码调用它。这使得迁移的 c# 代码量很小。随着您对 2010 开发的深入了解,您可以采用无法增量迁移的较大块,例如 UI。

    关于c# - Visual Studio 6 中 C++ 项目的推荐迁移策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958694/

    有关c# - Visual Studio 6 中 C++ 项目的推荐迁移策略的更多相关文章

    1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

      如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

    2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

      如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

    3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

      使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

    4. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

      我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

    5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

      我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

    6. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

      我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

    7. c# - 如何在 ruby​​ 中调用 C# dll? - 2

      如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

    8. Ruby 从大范围中获取第 n 个项目 - 2

      假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

    9. C# 到 Ruby sha1 base64 编码 - 2

      我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

    10. ruby-on-rails - Rails 中的推荐引擎 - 2

      我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

    随机推荐