Использование одинаковых имен для параметров и переменных - PullRequest
0 голосов
/ 12 марта 2012

Не могу найти информацию об этом нигде в интернете.

Я получил список указателей.Я пытаюсь преобразовать указатель в HWND, который необходим GetWIndowText method

    procedure DoSomething
    var
      text: string;
      someArray: array[0..256] of char;
    begin
      text := GetWindowText(HWND(PointerList[i]), someArray, 256);
    end

. Delphi не разрешает мне компилировать, потому что «отсутствует оператор или точка с запятой» - что за ...?

Я пытаюсь объявить переменную: var hwnd: HWND; - Ожидается константа или идентификатор типа ... erm ...?

Я слежу за некоторым кодом из Интернета.

Ответы [ 3 ]

6 голосов
/ 12 марта 2012

Для объявления переменной проблема в том, что имя переменной и тип совпадают. Вы можете решить проблему, указав тип:

var
  hwnd: Windows.HWND;

И вам может потребоваться сделать то же самое в приведении, если в вашем реальном коде есть переменная с именем hwnd, видимая в точке, в которой вы вызываете GetWindowText:

text := GetWindowText(Windows.HWND(PointerList[i]), someArray, 256);

Проблема в том, что объявление вашей переменной скрывает Windows.HWND и заменяет его переменной с именем hwnd.

Возможно, проще было бы избежать столкновения имен в первую очередь:

var
  WindowHandle: HWND;
...
text := GetWindowText(HWND(PointerList[i]), someArray, 256);
0 голосов
/ 12 марта 2012

( Публикация этого ответа в качестве ответа, поскольку в комментарии теперь достаточно текста )

Я думаю, что было бы полезно указать, что проблема называется SCOPE.

Допустим, у вас есть следующий код, который генерирует ошибку «Отсутствует оператор или точка с запятой»:

procedure DoSomething(HWND: THandle);
var
  text: string;
  someArray: array[0..256] of char;
begin
  text := GetWindowText(HWND(PointerList[i]), someArray, 256);
end;

В качестве подсказки отладки , если навести курсор мыши на HWNDв GetWindowText вы получите всплывающую подсказку типа " Var HWND: Cardinal - Unit1.pas (100) " 100, представляющий собой номер строки.По сути, компилятор «видит» параметр функции HWND в вашей функции вместо типа Windows HWND в Windows.pas.

Используя эту технику, вы можете точно определить, что представляет собой каждый элемент (функция, тип, переменная и т. Д.)на самом деле указывает на как видно из компилятора .

0 голосов
/ 12 марта 2012

Вы можете добавить акцент после указателя:

text := GetWindowText(HWND(PointerList[i]^), someArray, 256);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...