Тогда это не подходит.
Тогда какие есть варианты (кроме отлова ошибка по привычной схеме)?
Думаю. Пока никаких
При этом, разумеется, ломается компиляция использующих этот модуль программ. Падает, как ни странно, в строке 1944. Добавил 4 строки в модуле (псевдонимы типов) и на 4 строки ниже ошибка сползла. Метод:
// Строка ниже вызывает сбой при компиляции.
public static function ReadBoolTuple4(handler: ExceptionHandler; promptFormat: string := __FormatStringsHelper.WithOneIndex): ValueTuple<boolean, boolean, boolean, boolean>;
begin
var item1, item2, item3, item4: boolean;
try
item1 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 0));
item2 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 1));
item3 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 2));
item4 := BaseTypesUtils.ReadBool(string.Format(promptFormat, 3));
except
on e: Exception do
begin
if handler = nil then
raise;
handler(e);
end;
end;
Result := ValueTupleOf(item1, item2, item3, item4);
end;
Вспомогательная функция.
function ValueTupleOf<T, T1, T2, T3>(item1: T; item2: T1; item3: T2; item4: T3) := new ValueTuple(item1, item2, item3, item4);
Если бы были лямбды, или подобные фишки языка мне бы хотя бы было ясно в какую сторону копать, здесь же имеется простейший метод чтения кортежа.
NETMouseForPascal.pas (136.3 KB) __Helpers.pas (1.1 KB) NETMouse for NET.dll (76 KB)
Да, увидел ошибку.
Задача осложняется и тем, что, как сейчас выяснилось, ошибка может возникнуть при первой компиляции модуля (сразу после его открытия). Чудеса творятся…
Увидел - увидел. Очень неприятная ошибка. Пока не пойму, из-за какой конструкции она возникает и в какой подсистеме.
А разве это не упрощает поиск минимального кода? И я так и не понял, почему вы этим всё ещё не занялись?
Ошибка воспроизводится, но не понять когда она проявит себя. Это затрудняет минимизацию кода.
Желательно хотя бы чтобы была одна dll и один модуль
Всё стало ещё интересней:
Новая пища для размышлений на тему чем же SliceSpan не понравился компилятору.
__Helpers.pas (1.1 KB) NETMouseForPascalABC.pas (22.3 KB) NETMouse for NET.dll (76 KB)
В случае модуль и dll не воспроизводится. У вас есть?
__Helpers.pcu (3.7 KB) NETMouse for NET.dll (76.5 KB) NETMouseForPascal.pcu (174.6 KB)
Я как понял Вам готовый модуль был нужен?
Нет. Это я разберусь с 2-мя модулями. С одним модулем ошибка воспроизводится?
Да. Ниже подтверждение в виде скриншотов:
Компилятор дал сбой сразу после того, как я вставил код __Helpers
в NETMouseForPascal
.
А если вы работаете в чистой папке и там только один модуль и dll, - ошибка есть? Я также имею в виду, что вы сразу вошли.
Просто у меня на чистой папке не воспроизводится. А надо бы
У меня пока не воспроизвелось из папки, в которой ничего кроме модуля с .dll нет.
А попробуйте во всех модулях прописать {$savepcu false}
Ошибки нет с данной директивой.