使 DEV++ 与 Turbo C++ 中的 code/headers 兼容

Making DEV++ compatible with code/headers from Turbo C++

我在一家工厂工作,我们 80% 的设备都使用 MS-DOS 接口。我们的 None 工程师有 c/c++ 编程经验,因此要求我们向机器界面添加一些功能。我们的自动化组放弃了 MS-DOS 平台,转而使用 Allen-Bradley 控件。尽管我几乎没有 c/c++.

方面的经验,但我还是雄心勃勃并决定承担这个项目

关于问题:

所有程序都是用 Turbo C++ 编写和编译的。出于各种原因(易用性、额外 headers、更发达的 C++ 平台等),我更愿意使用 DEV++。问题是现有的编程严重依赖于 TC++ 的 non-standard headers。源代码中有 10 个左右 headers 在 DEV++ 中不可用,使用更现代的结构重写代码不是一种选择;我们将失去来自 AG、时间等的一点点支持。

有没有办法将所有 headers 从 TC++ 添加到 DEV++?例如,将 graphics.h 添加到 DEV++ 并使其功能齐全?我试过将它添加到 include 文件夹,用 #include"graphics.h" 调用它,如果 DEV++ 设法识别它,它会抛出大量编译错误,因为它无法识别 [=41] 中的内部命令=] 文件.

遗憾的是,由于 non-disclosure 和 copy-write 政策,我无法包含该项目的任何示例代码。

我的编程经验: DABBLE 在 RSLogigx500,5000 中; Arduino IDE(不评判);派克 6K ;面板视图; ~40 小时 self-taught c 和 c++。

如有任何帮助,我们将不胜感激。

更新 非常有用的信息。考虑到硬件的过时程度和我对该项目的限制,这似乎是不可能的,但感谢大家的投入。

大多数来自旧 Turbo C 的 headers 在某种程度上实际上只是 MSDOS API。因此,尝试在任何其他环境中使用这些 headers 没有任何意义,并且您不能将它们移植到 Windows 编译器。同样,graphics.h 适用于名为 BGI 的 Borland-specific DOS 图形库,不适用于任何其他编译器。

应该注意的是,旧的 Turbo C++(我假设是 3.1 版?)并没有太多遵循 C 或 C++ 标准。它使用的C++版本完全是古董

另请注意,Dev C++ IDE 已过时,不再更新 GCC 编译器。 CodeBlocks IDE 是更好的选择。

这更像是一个 "long comment" 而不是对您问题的直接回答,试图引导您更好地理解您在项目中可能遇到的挑战。

我个人会选择更"professional"级别的开发工具。 Eclipse(优点是它是可移植的,looks/feels 无论您使用 Windows 还是 Linux),XCode(仅适用于 Mac)或 Visual Studio(仅适用于 Windows)。这些都是功能齐全的集成开发环境,而且它们都非常灵活。所有这些都是免费或几乎免费的。

将为 DOS 编写的旧代码编译到具有现代 OS 的现代编译器中可能是一个相当大的挑战,具体取决于应用程序的功能和方式。关于代码编写环境的假设:

  • 是否假定 int 是 16 位
  • 它是否直接调用 DOS 来获取文件信息,opening/reading/writing/closing 个文件
  • 是否进行原始键盘输入
  • 是否直接在屏幕上戳字符 and/or 像素
  • 它是否使用 farnear 指针,是否有直接连接到硬件中断的类似驱动程序的组件

在您的问题中突出的一件事是提到 graphics.h,我认为这是 Borland 特有的。这意味着您必须编写自己的替换函数 - 替换 graphics.h 函数集(我希望大多数功能在任何现代 OS 中都可用,更像是 "what is it called and what do I need in order to call that function" ).这本身就是一项艰巨的任务。

这里棘手的部分不仅在于识别代码的作用,还在于用类似的逻辑替换它,在您的新环境中做同样的事情。

当然,这完全取决于您想对代码做什么,代码编写得有多好 - 它是否很好地模块化,每个功能是否只做一件事,或者是否有功能 "This calculates the value of , and then reads some data from disk, then does some I/O to the screen, and then talks to some external hardware, and because it gets calls frequently, also updates the time on the screen if it has changed".