Da wär erst mal die Funktion 'loaddll':
Delphi-Quellcode:
type
TDll=record
handle:thandle;
name:
string;
end;
{Anderer Code}
var
dlls:
array of tdll;
{Anderer Code}
function loaddll(
dll,
name:
string):boolean;
var _handle:thandle;
begin
result:=false;
if not fileexists(
dll)
then exit;
if name='
'
then exit;
_handle:=loadlibrary(pchar(
dll));
if _handle<>0
then begin
setlength(dlls,length(dlls)+1);
dlls[high(dlls)].handle:=_handle;
dlls[high(dlls)].
name:=name;
result:=true;
end;
end;
Sie ist dafür da mehrere DLLs dynamisch zu laden und zusammen mit anderen solchen Funktionen zu verwalten... (is in ner extra
Unit)
In der Hauptunit steht folgendes:
Delphi-Quellcode:
{Typ-Deklaration}
TTranslation=function (_name:pchar):pchar;
{weitere Typen und Code}
{globaler Var-Teil}
develop:boolean=false;
language:string='
german';
gettranslation:ttranslation;
{Implementation Teil}
procedure TForm1.FormCreate(Sender: TObject);
var dllerror:boolean;
s:
string;
begin
{Parameter checken und 'develop'(boolean) und 'language'(string) setzen}
if develop
then
dllerror:=not loaddll(extractfilepath(application.exename)+language+'
dll\'+language+'
.dll','
languagedll')
else
dllerror:=not loaddll(extractfilepath(application.exename)+language+'
.dll','
languagedll');
{dllerror prüfen und gegebenfalls programm terminieren}
//Funktion GetTranslation laden
@gettranslation:=GetProcAddress(getdllhandle('
languagedll'), '
GetTranslation');
if @gettranslation=nil
then begin
messagedlg('
Function "GetTranslation" in language DLL "'+language+'
.dll" could not be initialized.'+#13#10+'
Please check the DLL and restart SOL - Back to Earth.',mterror,[mbok],0);
application.terminate;
end;
s:='
title';
form1.caption:=gettranslation(pchar(s));
end;
Hab die unnötigen Stellen rausgelassen