{$APPTYPE CONSOLE}
program consform;
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
uses
{$ifdef FPC}{$ifdef unix}cthreads,{$endif}{$endif}
dynlibs,Classes, ctypes, Math, sysutils;
type
TformThread = class(TThread)
protected
procedure execute;
override;
public
constructor Create(CreateSuspended: boolean; AParent: TObject;
Const StackSize: SizeUInt = DefaultStackSize); overload; virtual;
procedure closelibform;
procedure changetitlelibform;
end;
var
formThread : TformThread;
astr : string;
isworking : boolean = true;
mainproc: procedure() ;cdecl;
closeform: procedure() ;cdecl;
changetitle: procedure(newtitle : string) ;cdecl;
msegui_Handle:TLibHandle=dynlibs.NilHandle;
constructor TformThread.Create(CreateSuspended: boolean; AParent: TObject;
Const StackSize: SizeUInt);
begin
FreeOnTerminate := true;
inherited Create(CreateSuspended, StackSize);
end;
procedure TformThread.closelibform;
begin
closeform;
end;
procedure TformThread.changetitlelibform;
begin
changetitle('New title at ' + timetostr(now));
end;
procedure TformThread.Execute;
begin
mainproc;
end;
begin
writeln('Start');
//msegui_Handle :=DynLibs.SafeLoadLibrary('/home/fred/consoleform/mselibform.so');
msegui_Handle :=DynLibs.SafeLoadLibrary('mselibform.dll');
Pointer(mainproc):=DynLibs.GetProcedureAddress(msegui_Handle,PChar('mainproc'));
Pointer(closeform):=DynLibs.GetProcedureAddress(msegui_Handle,PChar('closeform'));
Pointer(changetitle):=DynLibs.GetProcedureAddress(msegui_Handle,PChar('changetitle'));
formThread := tformThread.Create(false,nil);
writeln('Form Created');
while isworking do
begin
writeln('Write something');
readln(astr);
writeln(astr+' was entered.');
writeln();
if astr = 'changetitle' then
begin
changetitle('New title at ' + timetostr(now));
end;
if astr = 'quit' then
begin
isworking := false;
end;
end;
closeform;
formThread.terminate;
writeln('Bye bye...');
DynLibs.UnloadLibrary(msegui_Handle);
msegui_Handle:=DynLibs.NilHandle;
end.