Hi,
ich bin derzeit dabei ein einigermaßen ordentliches Plugin-System zu programmieren. Dazu sucht der User mit Hilfe eines OpenDialogs die
DLL aus. Dann wird mit dem folgenden Code die
DLL geladen und die Installationsprozedur ausgeführt und der
DLL-Pfad wird in eine
XML-Datei geschrieben, damit sie beim nächsten Starten auch wieder geladen wird...
Hier der SourceCode:
Delphi-Quellcode:
procedure TForm1.Installieren1Click(Sender: TObject);
var
InstFunc: TInstall;
InstFuncPtr: TFarProc;
DLLHandle: THandle;
PlgXML: IXMLDOMDocument2;
Plgs: IXMLDOMNode;
Plg: IXMLDOMNode;
PlgPath: IXMLDOMNode;
begin
if OpenDialog2.Execute
then begin
DLLHandle := LoadLibrary(PChar(OpenDialog1.FileName));
InstFuncPtr := GetProcAdress(DLLHandle,'
install');
if FuncPtr <>
nil then begin
@InstFunc := FuncPtr;
if InstFunc
then begin
MessageDlg('
Plugin-Installation erfolgreich', mtInformation, [mbOK], 0);
PlgXML := CoDOMDocument40.Create;
PlgXML.setProperty('
NewParser', True);
PlgXML.load(ExtractFileName(Application.ExeName)+'
plugins.xml');
if PlgXML.parseError.errorCode <> 0
then
begin
ShowMessage('
XML Fehler: '#13#10 + PlgXML.parseError.reason);
Exit;
end;
Plgs := PlgXML.documentElement;
Plg := PlgXML.createElement('
plugin');
PlgPath := PlgXML.createElement('
path');
PlgPath.text := OpenDialog2.FileName;
Plg.appendChild(PlgPath);
Plgs.appendChild(Plg);
PlgXml.save(ExtractFileName(Application.ExeName)+'
plugins.xml');
end;
FuncPtr :=
nil;
end else ShowMessage('
Plugin-DLL ist Fehlerhaft');
FreeLibrary(DLLHandle);
end;
end;
Das Problem liegt in der Anweisung "GetProcAdress()" und der Rest danach scheint auch nicht wirklich zu funktionieren... In der
OH steht nix zu DLLs...
Hope for fast help,
Chris