DP Delphi / Pascal  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Windows API и COM

Вопросы имитируют чтение и сопровождение рабочего Delphi/Pascal-кода. Нужно отделять факт от правдоподобного мифа, учитывать граничные случаи и явно формулировать договор. В тесте 30 вопросов и 18 примеров с кодом; рассматриваются «Дескрипторы Windows», «Цикл сообщений», «Жизненный цикл COM», «Передача COM между потоками», «Границы применимости» и «Сопровождение проекта».

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 30
Проследите обработку дескриптора в HandleOwner: какой вывод о владении ресурсом следует из проверки `INVALID_HANDLE_VALUE` и блока `finally`?
PascalDelphi / Pascal · Дескрипторы Windows
// Проследите фактическое поведение HandleOwner.
program HandleOwner;
uses Winapi.Windows, System.SysUtils;
var H: THandle;
begin
  H := CreateFile('data.bin', GENERIC_READ, FILE_SHARE_READ, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if H = INVALID_HANDLE_VALUE then
    RaiseLastOSError;
  try
    Writeln('opened');
  finally
    CloseHandle(H);
  end;
end.
Вопрос 2 из 30
Правка по теме «Цикл сообщений» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 3 из 30
Какой сценарий по теме «Жизненный цикл COM» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 4 из 30
Правка по теме «Передача COM между потоками» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить? Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 5 из 30
Какие две независимые проверки нужны для адаптера запуска процесса: граница платформы и достаточность выбранного API?
Вопрос 6 из 30
Что именно делает `ISpreadsheetGateway` узкой границей COM, а чего в показанном модуле ещё не хватает для единого перевода ошибок?
PascalDelphi / Pascal · Сопровождение проекта
// Проследите фактическое поведение ComGateway.
unit ComGateway;
interface
type
  ISpreadsheetGateway = interface
    procedure ExportRows(const FileName: string);
  end;
implementation
uses System.Win.ComObj, Winapi.ActiveX;
end.
Вопрос 7 из 30
Модуль, использующий тему «Дескрипторы Windows», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 8 из 30
Какое свойство темы «Цикл сообщений» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 9 из 30
Модуль, использующий тему «Жизненный цикл COM», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 10 из 30
Для темы «Передача COM между потоками» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 11 из 30
Какую архитектурную границу создаёт реализация `TWindowsProcessLauncher.Launch` вокруг `ShellExecuteEx`?
PascalDelphi / Pascal · Границы применимости
// Платформенный вызов изолирован, а полученный HANDLE проверяется и закрывается.
program WinApiAdapter;
{$APPTYPE CONSOLE}
uses System.SysUtils, Winapi.Windows, Winapi.ShellAPI;
type
  IProcessLauncher = interface
    function Launch(const FileName, Args: string): Cardinal;
  end;
  TWindowsProcessLauncher = class(TInterfacedObject, IProcessLauncher)
    function Launch(const FileName, Args: string): Cardinal;
  end;
function TWindowsProcessLauncher.Launch(const FileName, Args: string): Cardinal;
var
  Info: TShellExecuteInfo;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(Info);
  Info.fMask := SEE_MASK_NOCLOSEPROCESS;
  Info.lpFile := PChar(FileName);
  Info.lpParameters := PChar(Args);
  if not ShellExecuteEx(@Info) then
    RaiseLastOSError;
  if Info.hProcess = 0 then
    raise EInvalidOpException.Create('process handle was not returned');
  try
    Result := GetProcessId(Info.hProcess);
    if Result = 0 then
      RaiseLastOSError;
  finally
    CloseHandle(Info.hProcess);
  end;
end;
begin
end.
Вопрос 12 из 30
Какой сценарий по теме «Сопровождение проекта» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 13 из 30
В практическом сценарии по теме «Дескрипторы Windows» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 14 из 30
Две реализации темы «Цикл сообщений» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 15 из 30
В теме «Жизненный цикл COM» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 16 из 30
Чего не хватает, чтобы безопасно вызвать `Worker` из другого COM apartment?
PascalDelphi / Pascal · Передача COM между потоками
// Проследите фактическое поведение ComAcrossThreads.
program ComAcrossThreads;
uses System.Win.ComObj;
var Excel: OleVariant;
procedure CreateExcel;
begin
  Excel := CreateOleObject('Excel.Application');
end;
procedure Worker;
begin
  Excel.Workbooks.Add;
end;
begin end.
Вопрос 17 из 30
Какое свойство темы «Границы применимости» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 18 из 30
Модуль, использующий тему «Сопровождение проекта», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 19 из 30
Обычный пример по теме «Дескрипторы Windows» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 20 из 30
Для темы «Цикл сообщений» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 21 из 30
В `ComThread` сначала встречается `OleCheck(CoInitializeEx(nil, COINIT_APARTMENTTHREADED));`, а затем `{ create and use COM objects in this apartment }`. Какое наблюдаемое следствие относится именно к сценарию ComThread?
PascalDelphi / Pascal · Жизненный цикл COM
// Отделите правило языка от удачного запуска ComThread.
program ComThread;
uses System.Win.ComObj, Winapi.ActiveX;
procedure Worker;
begin
  OleCheck(CoInitializeEx(nil, COINIT_APARTMENTTHREADED));
  try
    { create and use COM objects in this apartment }
  finally
    CoUninitialize;
  end;
end;
begin end.
Вопрос 22 из 30
Правка по теме «Передача COM между потоками» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 23 из 30
Какое свойство адаптера сохранится при замене `ShellExecuteEx` другим способом запуска процесса?
Вопрос 24 из 30
Какое свойство темы «Сопровождение проекта» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 25 из 30
Для темы «Дескрипторы Windows» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 26 из 30
Две версии `MessageLoopWork` сохраняют порядок `function WindowProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LR…` → `Result := DefWindowProc(Wnd, Msg, WParam, LParam);`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Цикл сообщений
// Определите реальную гарантию в MessageLoopWork.
program MessageLoopWork;
uses Winapi.Windows;
function WindowProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
  if Msg = WM_COMMAND then
  begin
    Sleep(8000);
    Result := 0;
    Exit;
  end;
  Result := DefWindowProc(Wnd, Msg, WParam, LParam);
end;
begin end.
Вопрос 27 из 30
Реализацию темы «Жизненный цикл COM» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 28 из 30
Обычный пример по теме «Передача COM между потоками» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 29 из 30
Реализацию темы «Границы применимости» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 30 из 30
В теме «Сопровождение проекта» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу