mjn*_*mjn 4 delphi dll global-variables right-to-left
如果Delphi应用程序使用DLL(也是用Delphi创建的),那么在System.pas中会声明多个版本的变量吗?
我刚刚阅读了如何确定我是否作为控制台应用程序运行?(Win32上的Delphi)和评论解释说,可能有多个版本,例如,System.IsConsole有不同的值 - EXE中为True,DLL中为False(如果使用$ APPTYPE CONSOLE编译).
但是,其他变量似乎是针对应用程序范围的值而设计的
MainInstance: LongWord; { Handle of the main(.EXE) HInstance }
CPUCount: Integer; { Number of CPU Cores detected }
Run Code Online (Sandbox Code Playgroud)
开发人员如何看待在应用程序级别分配哪些值,哪些变量是特定于模块的(因此在DLL和EXE中可以有不同的值)?
或者我是否误解了这些全局变量?例如,System.BeginThread的文档说它设置了全局变量System.IsMultiThread - 但它怎么可能是全局变量而System.IsConsole不是?
除非您将DLL与RTL.bpl或用户定义的包含系统单元的"主"BPL链接,否则您的DLL将拥有自己的一组全局系统变量.它们在加载DLL时初始化.CPUCount不需要EXE来填充它.DLL通过向Windows询问其值来填充它.DLL也有自己的IsMultiThread变量(除非你将你的DLL链接到RTL.bpl ...).所以你的EXE可以有多个线程,DLL的IsMultiThread变量仍然是False.