c# - Delphi 4 和/或 Delphi 5 可执行文件能否集成到 C# 应用程序中?

标签 c# delphi integration compatibility legacy

能否将 Delphi 4 和\或 5 应用程序功能 (.exe) 集成到 C# 应用程序中?

我的任务是重写一个新的应用程序,该应用程序将基于现有的 Delphi 4/5 书面应用程序,这些应用程序目前与我公司没有人理解的批处理脚本放在一起。

作为临时解决方案,我被要求调查是否可以将 C# GUI\wrapper 放在顶部,以便更容易维护和运行。

我知道可以使用反射在 C# 应用程序中调用 Delphi 6 应用程序,但我不完全确定如何调用。

回到我原来的问题,Delphi 4/5 应用程序功能可以在 C# 应用程序中调用吗?

提前致谢。

最佳答案

这个问题的基本前提似乎是围绕 Delphi 核心的 C# 包装器更容易维护和运行,如果不是这样,那么创建包装器的想法就没有多大用处了。我认为这是一个错误的概念。

想象一下,我制作了一个可以与望远镜对话的应用程序。它做得很完美。在这种情况下,我也许可以只提取望远镜通信部分并将其放入 DLL 中,然后用 C# 编写一个用户界面,该界面使用 Delphi DLL 来完成与望远镜通信的任务。然而,除非您的 Delphi 应用程序已经以一种很好的方式构建,并且除非像这个望远镜通信库这样的任务已经存在,否则您将不会发现提取 Delphi 应用程序的任何部分并从 C# 中使用它非常容易。如果存在这种情况,我会使用 native Delphi DLL 函数导出并从 C# 调用它们。这不使用现有的 Delphi 可执行文件,并且需要花费大量时间将 Delphi 应用程序的一部分重构为可从 C# 使用的内容。

另一个答案提到了 COM 服务器,虽然这是可能的,但它不会让事情变得更容易;就像关于正则表达式的老笑话一样;当您遇到问题并尝试使用正则表达式解决它时,现在您遇到了两个问题。当您尝试使用 COM 服务器隐藏现有应用程序并使用 C# 在其之上编写全新的 UI 时,情况也是如此。实际上,以这种方式改进、调试和继续开发它需要更多的技术技能,而不是继续纯粹在 Delphi 或纯粹在 C# 中开发它。这是一种消极的努力节省。

您没有提供有关 Delphi 应用程序功能的任何信息,但我们假设它是一个业务线或垂直市场应用程序,可以读取某种文件格式,执行某种通信协议(protocol),甚至连接到某些旧数据库,你不想重写。

如果制作 C# UI 的意思是,永远不要显示 Delphi 应用程序用户界面并将其替换为 C# 用户界面,那么几乎可以肯定,您的想法不会使任何东西变得更好,而只会使事情变得更好更差。您的僵局要么来自于没有熟练的 delphi 开发人员,要么来自于没有聪明的开发人员能够弄清楚现有应用程序的功能。

当你处于这种情况时,解决方案通常是人为的解决方案;要么聘请熟练的 Delphi 开发人员并将应用程序带入现代 Delphi 时代(Delphi XE2),要么聘请熟练的非 Delphi 开发人员并将应用程序移植到其他语言。任何建议在 Delphi 应用程序之上编写“包装器”并认为这会使它“更容易”的人显然觉得无法重写现有应用程序。

可以肯定的是,我不太了解您的 Delphi 应用程序的功能,但在我看来这确实像是“恐惧驱动”的决定。包装旧代码几乎从来都不是一个好主意,而且通常只会产生更多问题。

关于c# - Delphi 4 和/或 Delphi 5 可执行文件能否集成到 C# 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10014810/

相关文章:

c# - 如何将类中的字符串连接到表单

c# - Rx Window 偶尔会丢失一些元素

c# - 多线程计算从多个文件加载数据。如何在 C# 中使用和同步 StreamReader?

c++ - 将 C 头文件中的 __declspec 转换为 Delphi

javascript - 将 CKEditor 4 集成到 EXT JS 4 中

c# - 为什么在 C# 中允许覆盖静态方法

c++ - 如何将 C++ union 转换为 Delphi

delphi - MSXML XPath 可以选择属性吗? (更新: real issue was with default no-prefix namespace )

testing - 如何在 TFS 发布管道中运行 NETCore 集成测试?

javascript - 在 Meteor 中使用 Jasmine 测试异步函数