Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Problem bei statischer/dynamischer DLL-Einbindung

  Alt 3. Sep 2005, 13:56
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat