You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder迁移至Windows 64-bit(Modern)平台时_RTLENTRY等未定义问题

问题分析与解决

核心原因

  1. 头文件路径配置缺失
    旧项目的_defs.h位于\include\windows\crtl\目录,但新环境下的bcc64x编译器默认包含路径未覆盖这个目录,导致用<_defs.h>找不到文件。尖括号<>会让编译器仅搜索系统标准头文件路径,旧项目的自定义头文件目录需要手动添加到编译搜索路径中。

  2. 编译器版本差异导致宏定义变更
    现代bcc64x编译器的头文件结构已更新,旧的_defs.h可能被整合到其他标准头文件(比如<sysdefs.h>或<crtl.h>)中;另外64位Windows平台只有一种统一的调用约定(__fastcall,编译器默认处理),所以_RTLENTRY在64位下为空定义是合理的,这类旧宏可能已不再需要显式依赖。

正确解决方法

方法1:修复头文件包含路径

  • 在IDE编译设置中,将旧项目头文件的根目录(即包含\include\windows\crtl\的上级目录)添加到头文件搜索路径。
  • 若路径配置后仍找不到文件,将#include <_defs.h>改为#include "_defs.h"(双引号会优先搜索当前源码目录及自定义包含路径)。

方法2:适配现代编译器规范

  • 直接移除_RTLENTRY:64位Windows下无需显式指定调用约定,编译器会自动使用标准64位调用约定,这个宏可以直接从函数声明中删除。
  • 替换_EXPFUNC:如果_EXPFUNC是导出函数的宏,改用现代编译器支持的__declspec(dllexport)(导出)或__declspec(dllimport)(导入),也可通过IDE项目设置(如Embarcadero的“Export Symbols”选项)统一配置导出,避免依赖旧宏。
  • 包含现代标准头文件:尝试包含<windows.h>或Embarcadero提供的<sysdefs.h>,这类头文件通常会包含必要的基础宏定义,替代旧的_defs.h。

不推荐的临时方案(仅应急)

直接复制宏定义到源码虽能解决编译错误,但会导致代码冗余,后续编译器更新或跨平台编译时易出现兼容性问题,不建议长期使用。

内容的提问来源于stack exchange,提问作者Александр Кулагин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:39:53