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.