从旧的 Borland C++ 迁移到 Visual C++ Express

Posted

技术标签:

【中文标题】从旧的 Borland C++ 迁移到 Visual C++ Express【英文标题】:Migrating from old Borland C++ to Visual C++ Express 【发布时间】:2009-05-07 15:25:41 【问题描述】:

冒着出现恐龙的风险,我有一些旧的 C++ 代码,用 Borland C++ 编译,它设置寄存器和与汇编程序模块的接口,我想对其进行现代化改造。我刚刚安装了MS VC++ Express,不用说很多东西都不行!默认似乎是 Win32,这很好,所以我已经删除了 FAR 和 HUGE。 PASCAL 似乎映射到 __stdcall。所以我有一个宏

 #define THRCOMP  extern "C" int FAR PASCAL _Export

THRCOMP 位于模块名称前面。这大概会导致类似

extern "C" int __stdcall _Export <modname>;

编译器不喜欢它,并发出一条关于“时代错误”的消息(没有说什么!)。怎么了?

此外,旧代码集具有内联汇编器,我需要将其转换为单独编译的子例程 - 是否有(免费)汇编器,它可以将汇编器 obj 卡与 C++ 链接吗?

顺便说一句,我看不到我的 obj 卡组 - 但 WinZip 把它们捡起来了!解释?

一般来说,是否有迁移旧 C++ 代码的指南?

提前致谢。

【问题讨论】:

【参考方案1】:

您的示例中的一些具体内容:

VC 根本不喜欢_Export。 过时之处在于您在数据声明中使用了修饰符(如__stdcall)。如果&lt;modname&gt; 没有括号,则它是一个数据声明并且修饰符不做任何事情。如果&lt;modname&gt; 是在汇编中实现的函数,您仍应在声明中包含参数列表。

例如:

extern "C" int __stdcall  modname( int x);

您可以从Windows Driver Kit(WDK - 以前称为 DDK)获得免费的汇编程序,但如果您当前的代码是使用 Borland 的 TASM 编译器编写的,它可能不会使用相同的语法,因此可能移植它需要做很多工作。但是,如果当前的汇编器是 16 位代码,那么无论如何您都需要做很多工作才能将其移植到 32 位汇编器...

【讨论】:

感谢您的及时答复! _export 是问题所在!知道我的 obj 文件发生了什么吗?提前致谢。 我不确定您所说的“看不到我的 obj 卡组”是什么意思 - 在什么情况下看不到它们? 我刚刚更改了一个选项以显示生成的 Asm,并且现在可以看到 obj 卡组! Winzip 之前提取了它们,但我在 Windows 资源管理器中看不到它们 - 现在看起来还可以 :) 仍然有一些奇怪之处,但我希望最终能找到它们......再次感谢。

以上是关于从旧的 Borland C++ 迁移到 Visual C++ Express的主要内容,如果未能解决你的问题,请参考以下文章

Android:应用程序从旧的 adt-bundle 迁移到最新的 android studio 后运行缓慢

sql 作者:Matt B,2016-10-17:帮助用户将101个Facebook导入时间表从旧的Facebook Importer插件迁移到

sql 作者:Matt B,2016-10-17:帮助用户将101个Facebook导入时间表从旧的Facebook Importer插件迁移到

从旧的 DataLayer 到 LINQ 再到 SQL / Entity Framework

数据库迁移

从旧的 html dom 元素创建 json