Задача: Создаем record — rec1 с функцией, которая возвращает record — rec2. При вызове любого метода в rec2 — возникает ошибка [DCC Fatal Error] F2084 Internal Error: C13394
Инструментарий: Delphi 2010
Решение: У нас следующая ситуация, есть код вида:
TRec2 = record
public
function GetStr : WideString;
end;
TRec1 = record
public
function GetRec2 : Rec2;
end;
Вызываем метод
var
Rec1 : TRec1;
SomeStr : WideString;
begin
...
SomeStr := Rec1.GetRec2.GetStr;
end;
Возникает ошибка:
[DCC Fatal Error] UnitName.pas(xxx): F2084 Internal Error: C13394
Немного поискал — нашел соответствующие отчеты об ошибках на Quality Central #82882 и #65595
Оба помеченные как исправлены в Build: : 15.0.3722.28600 если посмотреть на та таблицу Compiler Version то можно увидеть что 15 версия продукта — это Delphi XE. Обновить Delphi не вариант.
И все же как обойти ошибку F2084 Internal Error: C13394. Нам нужно присвоить промежуточный внутренней переменной результат функции GetRec2, и только потом вызвать метод. Что получилось в результате:
var
Rec1 : TRec1;
Rec2 : TRec2;
SomeStr : WideString;
begin
...
Rec2 := Rec1.GetRec2;
SomeStr := Rec2.GetStr;
end;
PS: Скорее всего есть обновление на Delphi 2010 которое исправляет данный баг.