这是一个问题(剩下的只是所以你可以告诉我,我做的全部都是错的)。防止Delphi MDI应用程序在外部DLL中创建TApplication
有没有什么办法可以确保第一个要运行的二进制文件(即我的可执行文件)是第一个初始化vcl.controls.pas的文件?
我问this question a few months ago和我想出如何到那里解决它,并同步再次合作只是膨胀了2009年德尔福
现在,我们已经有了德尔福XE2和相同的症状发生。 TThread.Synchronize锁定,直到系统空闲或您将鼠标移动到活动窗体上,导致程序超慢。我可以在Delphi 2009中重新创建问题,因为我很幸运,发现源代码是一个非迂回链接的DLL,但我不认为这是XE2的情况。我不知道为什么XE2决定以不同于Delphi 7或2009的方式初始化代码,但根据我对另一个问题的回答,TThread并没有真正改变,所以它必须在别的地方。
那么,我一直在通过我的主MDI应用程序的初始化,它似乎在链接的DLL内调用TApplication.Create(发生在VCL.Controls.pas的初始化中)。我不能说我明白为什么这是一个问题,因为我使用相同的运行时软件包(VCL,RTL等)构建了所有的东西。
在我看来,该DLL没有使用运行时软件包...当你使用运行时软件包时,应该只有一个引用到所有VCL的VCL。 – Nat 2012-01-12 00:29:06
除非有一些隐藏的.dproj奇怪,我可以确认每个DLL都使用确切的保存运行时软件包,包括VCL。实际上,我通过将有问题的DLL的'external'调用转换为调用'loadlibrary'和'getprocaddress'的delphi函数来解决这个问题。 – 2012-01-12 14:08:41