суббота, 27 марта 2010 г.

Последний раз о Delphi 2010 и ошибке с GetprocessId :)

Появилась лицензионная версия Delphi 2010, ура. В ней при запуске кода с объявленной функцией GetProcessId честно выдается сообщение об отсутствующей точке входа. Набор апдейтов такой же, как у триала. Спишем на недостаток триала - за месяц людям будет чего поизучать и без поведения программ, скомпилированных с некорректными импортами :)

пятница, 12 марта 2010 г.

Опять о поведении Delphi 2010

Выяснилось, что кроме тихой смерти приложения при запуске я наткнулся на известную в QC ошибку: http://qc.embarcadero.com/wc/qcmain.aspx?d=80448, связанную с некорретным объявлением функции GetProcessId в Windows.pas

Одним махом удалось наступить на двух зайцев. Коллеги утверждают, что мой код, скомпилированный в их версии 2010 честно говорит об отсутствующей точке входа. Видимо, набор updates не совпадает.

понедельник, 8 марта 2010 г.

Неожиданное поведение Delphi 2010

Windows 7, 64-бита, Delphi 2010, последний день триального периода. В связи с вопросом http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=75999 набираю пример тестового кода

procedure TForm1.Button1Click(Sender: TObject);

begin
  RunApplication;
end;

procedure TForm1.RunApplication;

var
  sexinfo: SHELLEXECUTEINFO;
  AContext: TEWContextRecord;
  S: string;
begin
  FillChar(sexinfo, 0, SizeOf(sexinfo));
  sexinfo.cbSize := SizeOf(sexinfo);
  sexinfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  sexinfo.lpFile := 'C:\Foo\bar.exe';
  Win32Check(ShellExecuteEx(@sexinfo));
  AContext.AppProcess := GetProcessId(sexinfo.hProcess);
  AContext.AppWnd := 0;
  EnumWindows(@MyEnumWindowsProc, Integer(@AContext));
  if IsWindow(AContext.AppWnd) then
  begin
    .....
    //Что-то
  end;
end;

Запускаю и удивляюсь - такое ощущение, что приложение запускается и тут же завершается. Если закомментировать строку AContext.AppProcess := GetProcessId(sexinfo.hProcess);  запускается, как положено, появляется форма с кнопкой, а стоит строку раскомментировать. Во всех окнах среды нет никаких замечаний, компиляция проходит без ошибок, предупреждений и хинтов. При запуске скомпилированного приложения вне среды, наконец появляется причина такого странного поведения:
Точка входа в процедуру GetProcessID не найдена в библиотеке DLL kernel32.dll.

Так как триал заканчивается завтра, скорее всего, не буду пытаться побороть.

Upd 09.03.2010: Delphi 2006 честно предупреждает об отсутствующей точке входа при попытке выполнить приложения в среде.