Я вижу несколько подозрительных вещей.
1
Вряд ли когда-либо требуется указатель на динамический массив, поскольку переменные динамического массива уже являются указателями (ну, ссылки ).
Чтобы передать такой массив функции или процедуре, используйте var
параметры:
procedure TForm1.Test(var a: TRecArray);
Теперь вам не нужно использовать синтаксис указателя для доступа к массиву:
a[0].b := 'test2';
2
Вы вызываете Test с помощью:
Test(PRecArray(v1));
В вашем оригинале Test принял PRecArray, но вы не передаете его (вы передаете TRecArray), поэтому вам следуетсделали:
Test(@v1); // or Test(Addr(v1));
Применяя мои изменения выше, где Test имеет параметр var
, просто используйте:
Test(v1);
3
Хорошо, это вероятноне подозрительно, но я бы хотел добавить мою статью Addressing Pointers , посвященную указателям для программистов на Delphi.Это объясняет многие проблемы, которые у вас, похоже, есть.