DLL создаёт потоки. В потоке происходит AV. Дефолтный виндовый хэндлер убивает всё приложение
 
 Несовместимо с моей парадигмой "Если есть что сохранять, то при крахе должно сработать автосохранение".
Устанавливать обработчик в DLL? Можно было бы. НО. Это что пнём об сову, что совой об пень: этот обработчик должен уметь распознать исключения в EXE и перенаправить туда.
Обработчик-то единый на процесс, на все исполняемые модули и все потоки.
Добавлено спустя 6 часов 7 минут 55 секунд:
Оооо-кей, нашёл один нежданчик в стиле "самдурак".
 Кучу запарывало только так.
  Кучу запарывало только так.Задачка для любознательных: какое безбожное святотатство содержится в этом фрагменте, и в какой строчке?
 
 - Код: Выделить всё
- //function unzGetCurrentFileInfo(afile: unzFile; pfile_info: unz_file_info_ptr; szFileName: PChar; fileNameBufferSize: longint; extraField: pointer; extraFieldBufferSize: longint; szComment: PChar; commentBufferSize: longint): longint; { ZEXPORT }
 function TUnzip.GetCurrentFileInfo(pfile_info: unz_file_info_ptr; var FileName: AnsiString; extraField: pointer; extraFieldBufferSize: longint; var Comment: AnsiString): boolean; { ZEXPORT }
 { Get Info about the current file
 if pfile_info<>NIL, the pfile_info^ structure will contain somes
 info about the current file
 if szFileName<>NIL, the filemane string will be copied in szFileName
 (fileNameBufferSize is the size of the buffer)
 if extraField<>NIL, the extra field information will be copied in
 extraField (extraFieldBufferSize is the size of the buffer).
 This is the Central-header version of the extra field
 if szComment<>NIL, the comment string of the file will be copied in
 szComment (commentBufferSize is the size of the buffer) }
 var name_sz, comm_sz: longint;
 begin
 //function TUnzip.GetCurrentFileInfoInternal(pfile_info: unz_file_info_ptr; pfile_info_internal: unz_file_info_internal_ptr;
 // szFileName: PChar; fileNameBufferSize: longint; extraField: pointer; extraFieldBufferSize: longint;
 // szComment: PChar; commentBufferSize: longint): longint;
 // unzGetCurrentFileInfo := unzlocal_GetCurrentFileInfoInternal(afile,
 // pfile_info, nil, szFileName, fileNameBufferSize,
 // extraField, extraFieldBufferSize,
 // szComment, commentBufferSize);
 SetLength(FileName, UNZ_MAXFILENAMEINZIP + 1);
 SetLength(Comment, 1000);
 Result:= UNZ_OK = GetCurrentFileInfoInternal(
 pfile_info, nil,
 @FileName[1], Length(FileName),
 extraField, extraFieldBufferSize,
 @Comment, Length(Comment)
 );
 CutAnsiStringByZeroChar(FileName);
 CutAnsiStringByZeroChar(Comment);
 end;
Добавлено спустя 12 часов 44 минуты 45 секунд:
Пока ехал в метро на работу, добавил отладочный режим где потоки не создаются, а все фоновые задачи выполняются в основном потоке.
Падать перестало.
Раздражает.

Добавлено спустя 7 часов 35 минут 50 секунд:
P.S. Моё отношение к изменениям механизма строк в грядущем fpc 3:
Я очень рад что они наконец-то это сделали, и обязательно сделаю свой движок 100% юникодным (о чём давно мечтал). Но доползу далеко не сразу. Частичная переделка вялотечёт уже давно, но сделать ещё предстоит немало, и - буду честен - для меня сейчас гораздо важнее получить рабочий игровой мир где уже бегают монстры и плещутся волны. Так что, скорее всего, и Чентра и Чеперси до конца 2015-го застрянут на связке FPC 2.6.4 / внутренняя кодировка = WideString.






 
  
 





 
  

