W swoim programie chciałem wprowadzić obsługę języków. Jako pakiety językowe stosuje się pliki tekstowe o rozszerzeniu np. *.lng
Ja postanowiłem wykorzystać do tego celu bibliotekę DLL
Tutaj dokładnie opiszę co po kolei robiłem:
Stworzyłem plik *.rc:
{Kod pliku *.rc}
STRINGLIST
101, "Pierwszy tekst"
102, "Drugi tekst"
itd....
END
Skompilowałem go do pliku *.res i dodałem do zasobów biblioteki *.dll
{Kod biblioteki DLL}
library język;
{$R skompilowany_plik_rc.res}
begin
end.
Bibliotekę chciałem dodać do programu. Program Wykrywa DLL i dodaje do ListBoxa:
{Kawałek kodu programu}
procedure TForm3.FormCreate(Sender: TObject);
var sr: TSearchRec; czyKoniec: Integer;
begin
ListBox2.Items.Clear;
czyKoniec:=0;
FindFirst('Languages\*.dll',FaAnyFile,sr);
while czyKoniec=0 do
begin
ListBox2.Items.Add(sr.Name);
czyKoniec:=FindNext(sr);
end;
SysUtils.FindClose(sr);
end;
Wszystko szło bardzo fajnie, ale tylko do tego momentu :-(
private
{ Private declarations }
procedure Odpal;
.........
{Wywołanie OnClick ListBoxa}
procedure TForm3.ListBox2Click(Sender: TObject);
begin
if ListBox2.ItemIndex <> -1 then
Odpal;
end;
procedure TForm3.Odpal;
var
Name : String;
DLL : THandle;
Buffer : array[0..255] of char;
begin
DLL := LoadLibrary(PChar(Name));
try
LoadString(DLL, 101, Buffer, SizeOf(Buffer));
Form1.Label1.Caption := Buffer;
LoadString(DLL, 102, Buffer, SizeOf(Buffer));
Form1.Button1.Hint := Buffer;
itd...............
finally
FreeLibrary(DLL);
end;
end;
end.
Gdy klikam na jeden z Item-ów w ListBox-ie, biblioteka się nieładuje. Trochę modyfikowałem kod i też nic!!!
Czy ktoś z was wie jak to naprawić? Wydaje mi się, że nie trzeba wprowadzać dużych zmian. Prawdopodobnie jest błąd w procedurze "Odpal".
Liczę na waszą pomoc ;)
Nara!