Plugins erstellen unter linux

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@mschnell

Library schreiben und eine Funktion exportieren die das Formular erstellt. Als shared-object wird das Formular dann ohnehin im MainThread eingehängt. Also etwa so:

Code: Alles auswählen

function MainForm.CallSharedObject(ModulName: string; var Modul: pointer; var Form: TForm): boolean;
var
  proc: pointer;
begin
  Result:= false;
  // Modul hier laden
  if Modul <> nil then begin
    // proc-Pointer holen
    if proc <> nil
      then Form:= proc(Self[,args]);
  end;
  Result:= (Modul <> nil) and (proc <> nil) and (Form <> nil);
end;
Die Methode klappt bei Delphi ziemlich problemlos, dadurch wird MainForm oder ein beliebiges anderes Formular zum Eigentümer des shared-objects. Für die Datenübergabe kann man dann noch eine entsprechende Methode einhängen, die in beide Richtungen arbeitet. Globale Variable innerhalb der Library lassen sich zur Übergabe eh nicht benutzen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

@Michael
ganz einfach es soll ja universell sein und nicht unbedingt Lazarus spezifisch wie soll man c Programmierern erklären das sie son komisches Textformat wie das lrs Format nehmen sollen Lazarus hat XML Formreader ist auso der selbe Aufwand und man kann sich gegenüber dem rest der Welt viel besser verteidigen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

@ schnuller backe, das mit formularen in dlls, hab ich bei delphi unter win schonmal gemacht, es geht aber eher darum, damm man beliebig vile sachen einhängen kann, dll sind ja normalerweise fest eingebunden, quasi.
ich musss die aber einfürgen können, und das prog soll die dann werend der laufzeit einbinden.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

DLL-Plugins kann man zur Laufzeit einfügen. Die DLLs müssen dieselbe Struktur (Einsprünge) haben. Zur laufzeit wird das Programm mit dem Namen der DLL konfiguriert und ruft diese dann mit den (schon zur Compile-Zeit bekannten) Funktionen auf.

-Michael

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@hanibal

Kann man doch, denk dir ne Namenskonvention für die Module aus und sammel die wie bei Linux üblich in einem Verzeichnis /lib. Dann kannst du dir aus allen modulen eine Liste beim Start des Programmes bauen und kannst einfach neue Module durch Speichern im Verzeichnis hinzufügen.

Klar definierte Create-Funktion und für die Datenübergabe TField-Objekte nehmen. Dann kann man die nach belieben auswerten.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten