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:
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.
@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.
@ 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.
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.
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.