TApplication.Create вызывается из другой DLL, следовательно, он пробуждает неверный дескриптор или какую-то ерунду в этом обратном вызове.
Вам необходимо исключить статически связанные библиотеки DLL, которые включают [vcl.] Controls.pas, потому что TApplication.Create происходит в некотором коде инициализации в этом модуле.
Как только вы сделаете это, синхронизация будет восстановлена в своем былом великолепии.
К сожалению, исправления, которые вы делаете в одной версии Delphi, могут быть отменены из-за изменений, внесенных в другой версии Delphi.Так что, если проблема вернется, вернитесь к чертежной доске.Пройдите через код инициализации, в частности, процедуру initUnits
в system.pas.Он запускает код инициализации и в конечном итоге наталкивается на vcl.controls.pas, и вы можете заглянуть в запись UnitInfo
, чтобы выяснить, из какого файла вызывается этот файл.
Лучший способ исправить это - использовать delayed
со всеми внешними dll (по крайней мере со всеми внешними DLL-библиотеками Delphi VCL).
function didntknowIusedcontrolsbutIdo() : Integer; external 'useful.dll' delayed;
Но это толькоработает в Delphi 2010 и выше.Хорошо, что вы перешли на XE2 между моментом, когда вы задали этот вопрос, и временем, когда вы наконец нашли удовлетворительный ответ на него.