加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读