Как встроить переменные статического массива в Rio

Мне не удается встроить такие конструкции, как

var FileName: array[0..2047] of Char;

Это работает:

procedure TForm1.AcceptFiles(var Msg: TWMDropFiles);
var FileName: array[0..2047] of Char;
begin
  DragQueryFile(msg.Drop, $FFFFFFFF, FileName, 2048);
  ...
end;

Но это не удается, если FileName встроен:

procedure TForm1.AcceptFiles(var Msg: TWMDropFiles);
begin
  var FileName: array[0..2047] of Char; // E2029 Expression expected but array found
  DragQueryFile(msg.Drop, $FFFFFFFF, FileName, 2048);
  ...
end;

Мне удалось встроить 12 КБ переменных любого типа, но похоже, что ничего из приведенной ниже формы не может быть встроено:

begin
  var Name: array[X..Y] of Z;
end;

Посоветуйте, пожалуйста, как это делается в Rio 10.3.3.

Билет QC открыт по адресу: quality.embarcadero.com/browse/RSP-31970

Gad D Lord 19.12.2020 03:18

Предыдущие встроенные вар-тикеты уже разрешены: 22113 , quality.embarcadero.com/browse/RSP-21680

Gad D Lord 19.12.2020 03:18

проблема исчезнет, ​​если вы заранее определите тип массива? type TFileNameArr = array[0..2048] of Char; var FileName: TFileNameArr;

Remy Lebeau 19.12.2020 06:33

Кстати, вы передаете 2048 в API, но массив имеет длину 2049.

David Heffernan 19.12.2020 09:48

@RemyLebeau это работает. процедура Proc1; константа MAX_FILENAME_LEN = 2048; typeTFileNameArray = массив [0..MAX_FILENAME_LEN - 1] из Char; begin var FileName: TFileNameArray; DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, MAX_FILENAME_LEN); Пожалуйста, не стесняйтесь отправлять в качестве ответа, чтобы я мог одобрить.

Gad D Lord 19.12.2020 11:01

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

LU RD 19.12.2020 12:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
180
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как справедливо предположил @Remy Lebeau, решение состоит в том, чтобы сначала объявить тип

procedure TForm1.AcceptFiles(var Msg: TWMDropFiles);
type
  TFileNameArray = array[0..2047] of Char;
begin
  var FileName: TFileNameArray;
  DragQueryFile(msg.Drop, $FFFFFFFF, FileName, 2048);
  ...
end;

Другие вопросы по теме