delphi – 使用DLL的应用程序中System.pas中的全局变量
发布时间:2020-12-15 09:36:08 所属栏目:大数据 来源:网络整理
导读:如果Delphi应用程序使用DL??L(也是用Delphi创建的),那么在System.pas中会声明多个版本的变量吗? 我刚读了How to determine if I’m running as a console app? (Delphi on Win32)并且评论解释说可能有多个版本,例如,System.IsConsole有不同的值 – 在EXE中
如果Delphi应用程序使用DL??L(也是用Delphi创建的),那么在System.pas中会声明多个版本的变量吗?
我刚读了How to determine if I’m running as a console app? (Delphi on Win32)并且评论解释说可能有多个版本,例如,System.IsConsole有不同的值 – 在EXE中为True,在DLL中为False(如果它是使用$APPTYPE CONSOLE编译的). 但是,其他变量似乎是针对应用程序范围的值而设计的 MainInstance: LongWord; { Handle of the main(.EXE) HInstance } CPUCount: Integer; { Number of CPU Cores detected } 开发人员如何看待在应用程序级别分配哪些值,哪些变量是特定于模块的(因此在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.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |