冒着出现恐龙的风险,我有一些旧的C ++代码,用Borland C ++编译,它设置寄存器,并与Assembler模块接口,我想现代化。我刚刚安装了MS VC ++ Express,不用说很多东西都不行!默认似乎是Win32,这很好,所以我已经消除了FAR和巨大。 PASCAL似乎映射到__stdcall。所以我有一个宏
#define THRCOMP extern "C" int FAR PASCAL _Export
其中THRCOMP
位于模块名称前面。这可能会产生类似
extern "C" int __stdcall _Export <modname>;
编译器不喜欢,并发出关于“时代错误”的消息(不说什么!)。有什么问题?
旧代码集还有内联汇编程序,我需要将其转换为单独编译的子程序 - 是否有(免费)汇编程序,它可以用C ++链接Assembler obj decks吗?
顺便说一句,我看不到我的obj甲板 - 但WinZip捡起它们!解释
通常,是否有迁移旧C ++代码的指南?
提前致谢。
答案 0 :(得分:1)
您的示例中的几个具体事项:
_Export
。__stdcall
)。如果<modname>
没有parens,则它是一个数据声明,修饰符不做任何事情。如果<modname>
是在程序集中实现的函数,那么您仍应该声明包含参数列表。例如:
extern "C" int __stdcall modname( int x);
你可以从Windows Driver Kit(WDK - 曾经被称为DDK)获得一个免费的汇编程序,但是如果你当前的代码是使用Borland的TASM编译器编写的,那么它可能没有使用相同的语法,所以移植它可能会有相当多的工作。但是,如果当前的汇编程序是16位代码,那么无论如何你都需要将它移植到32位汇编程序......