如何移除Delphi 12 FMX Windows应用对api-ms-win-crt-string-l1-1-0.dll的依赖?
Delphi 12 Win64 FMX应用UCRT依赖疑问
与传统Delphi应用不同,使用Delphi 12为Win64平台编译的纯空FMX应用,会依赖一个用户电脑可能未预装的库。我发现System.Win.Crtl.pas单元包含对api-ms-win-crt*...dll的依赖,其中存在如下条件编译指令:
{$IFDEF UCRT} {...use these libraies...} {$ELSE} msvcrt = 'msvcrt.dll'; {$ENDIF}
旧版Delphi始终仅依赖msvcrt.dll,但我未在官方文档中找到UCRT条件编译指令的相关说明,因此想确认:是否可以取消定义该指令,让应用仅链接到msvcrt.dll?
解答
- 不建议手动取消定义
UCRT指令。Delphi 12针对Win64平台已将CRT(C运行时库)依赖切换至UCRT,这是微软现代Windows平台推荐的标准运行时库;而msvcrt.dll属于旧版运行时,微软已停止主动维护,仅保留兼容性支持。 - 强行取消
UCRT定义可能引发Delphi标准库功能异常,尤其是那些依赖UCRT新特性的API(如Unicode处理、新式文件操作函数等)。 - 解决用户电脑缺少UCRT的更稳妥方案:
- 在应用安装包中集成UCRT的可再发行组件包,微软提供了对应的离线安装程序,可直接嵌入你的安装流程。
- 若Delphi 12支持,可选择静态链接UCRT,编译后的可执行文件会包含所需的UCRT代码,无需依赖系统动态库。
内容的提问来源于stack exchange,提问作者Sargis
相关产品推荐
相关产品推荐

