Robię edytor na podstawie synedita i chciałem trochę odciążyć exe. Wpadłem więc na pomysł żeby zamiast wszystkie highlighter były od razu w kodzie źródłowym to żeby je ładować z bliblioteki DLL. Jednak mi to jakoś nie wychodzi.
Oto kod jednego z DLL:
library Pascal;
uses
SynEditHighlighter,
SynHighlighterPas,
Graphics,
Forms;
function GetSyntax:TSynCustomHighlighter; stdcall;
var HL : TSynPasSyn;
begin
HL := TSynPasSyn.Create(Application);
result := hl;
end;
exports
GetSyntax name 'GetSyntax';
begin
A oto procedura która ładuje:
procedure TfrmTextViewer.ListBox1Change(Sender: TObject);
var
DLL : THandle;
GetSyntax : function:TSynCustomHighlighter;
begin
if listbox1.Items[listbox1.itemindex] = '(Brak)' then exit;
DLL := LoadLibrary(Pchar(path + listbox1.Items[listbox1.itemindex]));
try
SynEdit1.Highlighter := nil;
@GetSyntax := GetProcAddress(DLL, 'GetSyntax');
if @GetSyntax = nil then
begin
SynEdit1.Highlighter := nil;
listbox1.itemindex := 0;
raise Exception.Create('Nie można załadować procedury');
end;
SynEdit1.Highlighter := GetSyntax;
finally
FreeLibrary(DLL);
end;
end;
Gdzie popełniłem błąd???