DScintilla вылетает при наборе определенного кода (текста)

Пишу для себя простенький редактор кода на Делфи, и для подсветки кода использую dscintilla. Подключил подсветку для си файлов (xxx.SetLexer(SCLEX_CPP);). Подсвечивает отлично. Но при наборе текста вручную определённого текста(!), программа вылетает с ошибкой (Project Edii.exe raised exception class $C0000005 with message 'access violation at 0x5a368627: read of address 0x01598000'). Если этот же текст набрать где-то в блокноте и потом скопировать в мой редактор, то все нормально, а вот если набирать вручную, то полный аут. А именно: сразу после названия макроса идёт открывающаяся скобка, вот на ней и вылетает! Текст ввожу такой

#define MyMacro(a)  X
#if MyMacro(<-здесь вылетает Y)==Z

Пробовал разные версии DLL (431, 446) - не помогло (446 взял из Notepad++, а там не вылетает, вероятно потому что он написан на си, и dscintilla не используется, то есть дело скорее не в длл, а именно в dscintilla). Причем если подключить другой лексер (не SCLEX_CPP, а например SCLEX_PYTHON или другие) то ничего не вылетает. Если копирую текст - тоже не вылетает.

unit Edi2;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DScintillaCustom, DScintilla,DScintillaTypes;

type
  TFmEdi2 = class(TForm)
    DSci: TDScintilla;
    procedure FormCreate(Sender: TObject);
  end;

var
  FmEdi2: TFmEdi2;

implementation
{$R *.dfm}

procedure TFmEdi2.FormCreate(Sender: TObject);
begin
  DSci.DllModule := 'SciLexer356.dll'; //'Scintilla.dll';// 'Lexilla.dll';//the syntax library
  DSci.SetLexer(SCLEX_CPP);//CSS);//RUBY);//PERL);//SQL);//NULL);//CONTAINER);//PYTHON);//      // and setting the syntax highlighter, see SCLEX_ types in DScintillaTypes.pas
  DSci.SetText(
'#define MyMacro(a) X'#$D#$A +
'#if MyMacro');
end;

end.

Ответы (0 шт):