У меня есть приложение Delphi 2010, которое экспортирует DLL и имеет заголовок library
. Он создает свою MainForm в TThread, например:
var
ActiveThread: TActive;
type
TActive= class(TThread)
protected
procedure Execute; override;
end;
procedure TActive.Execute;
begin
Application.Initialize;
Application.CreateForm(MyForm, form);
Application.Run;
end;
begin
ActiveThread := TActive.Create(true);
ActiveThread.FreeOnTerminate := true;
ActiveThread.Resume;
end.
Всякий раз, когда я загружаю эту DLL через функцию LoadLibrary
, приложение работает нормально. (Очевидно, он использует поток, который я передал LoadLibrary
, в качестве основного потока и не имеет проблем)
Но если я попытаюсь экспортировать эту DLL в настоящий EXE-файл, изменив сгенерированный вывод в «Параметры» -> «Приложение. и изменить заголовок с library
на program
, а затем построить его и выполнить выходной EXE вместо загрузки DLL через Windows API, приложение зависает при попытке создать форму, особенно в Application.CreateForm(MyForm, form);
. Если я удаляю инициализацию приложения из потока и помещаю ее в основную процедуру, она работает нормально.
Форма, которую я пытаюсь отобразить, - это просто пустая форма. Любые идеи?