[Ficl-developers] Delphi DLL
Brought to you by:
jsadler
From: Robert V. G. <rcv...@op...> - 2001-12-01 03:30:40
|
Hi, Thankyou for Ficl.=20 I to have been interfacing ficl to another language -- Delphi. I wanted a easy word oriented macro language (at least on the surface) = so users could add modify and change the order of various equipment = control functions. I looked a delphi script and python and came to the = conclusion that they we to structured for the non programmer. I then = remembered a encounter with forth many years ago. After a google search = found that it was active and after finding ficl I turned the forth = engine into a windows dll and can call it delphi. Still lots to do but I = am sure the idea will be successful.=20 Robert Van Gemet ----------------------------------------- unit FORTH; interface uses Windows, SysUtils; type CallBackFuncType =3D procedure(msg: PChar); stdcall; var InitFicl: function: integer stdcall; TermFicl: procedure stdcall; EvalFicl: function(_in: PChar): integer stdcall; ExecFicl: function(_in: PChar): integer stdcall; GetFiclText: function: PChar stdcall; FiclSetCallBack: procedure(fun: CALLBACKFUNCTYPE) stdcall; var DLLLoaded: Boolean =3D False; implementation var SaveExit: pointer; DLLHandle: THandle; ErrorMode: Integer; procedure NewExit; far; begin ExitProc :=3D SaveExit; FreeLibrary(DLLHandle) end; procedure LoadDLL; var dll: string; begin if DLLLoaded then Exit; ErrorMode :=3D SetErrorMode($8000{SEM_NoOpenFileErrorBox}); dll :=3D ExtractFilePath(ParamStr(0))+'FORTH.DLL'; DLLHandle :=3D LoadLibrary(pchar(dll)); if DLLHandle >=3D 32 then begin DLLLoaded :=3D True; SaveExit :=3D ExitProc; ExitProc :=3D @NewExit; @InitFicl :=3D GetProcAddress(DLLHandle,'InitFicl'); @TermFicl :=3D GetProcAddress(DLLHandle,'TermFicl'); @EvalFicl :=3D GetProcAddress(DLLHandle,'EvalFicl'); @ExecFicl :=3D GetProcAddress(DLLHandle,'ExecFicl'); @GetFiclText :=3D GetProcAddress(DLLHandle,'GetFiclText'); @FiclSetCallBack :=3D GetProcAddress(DLLHandle,'FiclSetCallBack'); Assert(@InitFicl <> nil); Assert(@TermFicl <> nil); Assert(@EvalFicl <> nil); Assert(@ExecFicl <> nil); Assert(@FiclSetCallBack <> nil); end else begin DLLLoaded :=3D False; end; SetErrorMode(ErrorMode) end; initialization begin LoadDLL; end; end. |