суббота, 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 не совпадает.
Одним махом удалось наступить на двух зайцев. Коллеги утверждают, что мой код, скомпилированный в их версии 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 честно предупреждает об отсутствующей точке входа при попытке выполнить приложения в среде.
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 честно предупреждает об отсутствующей точке входа при попытке выполнить приложения в среде.
Подписаться на:
Сообщения (Atom)