System.IsLibrary与SysInit.ModuleIsLib的区别及C++ Builder下的差异
System.IsLibrary 与 SysInit.ModuleIsLib 的区别及C++ Builder中的表现
变量定义回顾
System.IsLibrary
表示模块是否为共享库。
当模块是动态链接库(DLL)时,IsLibrary变量为True。
SysInit.ModuleIsLib
当此模块是DLL(动态链接库或包)时为True。
核心区别
层级与使用场景不同
System.IsLibrary是System单元对外公开的全局变量,属于VCL/FMX框架的上层封装,供应用开发者直接调用;SysInit.ModuleIsLib是RTL(运行时库)底层SysInit单元中的内部变量,属于实现细节,官方不推荐开发者直接访问。判断范围不同
System.IsLibrary仅识别标准DLL模块;SysInit.ModuleIsLib的判断范围更宽,除标准DLL外,还会将C++ Builder中的包(BPL文件,本质是特殊DLL)识别为True。
C++ Builder中的表现
二者的区别在C++ Builder中完全保留,没有变化:
- 编译生成标准DLL时,两个变量均返回
True。 - 编译生成BPL包时,
SysInit.ModuleIsLib返回True,但System.IsLibrary返回False。 - 编译生成EXE程序时,两个变量均返回
False。
内容的提问来源于stack exchange,提问作者Александр Кулагин
相关产品推荐
相关产品推荐

