delphi – 使用DLL的应用程序中System.pas中的全局变量

delphi – 使用DLL的应用程序中System.pas中的全局变量,第1张

概述如果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(如果它 如果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. 总结

以上是内存溢出为你收集整理的delphi – 使用DLL的应用程序中System.pas中的全局变量全部内容,希望文章能够帮你解决delphi – 使用DLL的应用程序中System.pas中的全局变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存