Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

PlugIn laden / Verständnis

  Alt 17. Nov 2006, 14:39
Hallo,

hab ja gesagt, dass ich PlugIns lade. Jetzt hier nochmal der Quelltext, der mein PlugIn läd. Ist das so korrekt von der vorgehensweise? Der Code ist momentan (zum Lernen) aus Sakura's PlugIn-Tut. Habe ein Schema drangehängt und nochmal eine Frage, ob er an der Stelle, die markiert ist, wirklich das macht, was ich aufgeschrieben habe. Hätte dazu gerne nochmal eine genauere Erklärung.

Delphi-Quellcode:
procedure TForm1.LoadPlugin(DLLName: string);
var
  TempHandle: Cardinal;
  ProcAddr: Pointer;
  LoadPlugInProc: TLoadPlugIn;
  TempPlugIn: TPlugIn;
begin
  // load library
  TempHandle := LoadLibrary(PChar(DLLName));
  if (TempHandle <> INVALID_HANDLE_VALUE) and (TempHandle <> 0) then
  begin
    // library loaded, load register function
    ProcAddr := GetProcAddress(TempHandle, 'LoadPlugIn');
    if ProcAddr = nil then
    begin
      // register function not exported
      FreeLibrary(TempHandle);
      Exit;
    end;
    LoadPlugInProc := TLoadPlugIn(ProcAddr); //<------DIESE STELLE
    try
      TempPlugIn := nil;
      LoadPlugInProc(Application.Handle, TempPlugIn);
    except
      // register function invalid
      FreeLibrary(TempHandle);
      Exit;
    end;
    // add to array of plug-ins
    SetLength(FPlugIns, Succ(Length(FPlugIns)));
    FPlugIns[High(FPlugIns)].Handle := TempHandle;
    // test for plug-in object
    if TempPlugIn <> nil then
    begin
      // plug-in object exists, add to menü
      FPlugIns[High(FPlugIns)].PlugIn := TempPlugIn;
      FPlugIns[High(FPlugIns)].MenuItem := TMenuItem.Create(Self);
      FPlugIns[High(FPlugIns)].MenuItem.Caption := TempPlugIn.GetPlugInName;
      PlugIns1.Add(FPlugIns[High(FPlugIns)].MenuItem);
      FPlugIns[High(FPlugIns)].MenuItem.OnClick:=ExecutePlugIn;

    end else begin
      // plug-in does not exist
      FPlugIns[High(FPlugIns)].PlugIn := nil;
      FPlugIns[High(FPlugIns)].MenuItem := nil;
    end;
  end else
  begin
    FreeLibrary(TempHandle);
    Exit;
  end;
end;
Danke
Miniaturansicht angehängter Grafiken
loadplugin_131.jpg  
  Mit Zitat antworten Zitat