I'm playing with DXE a bit, and got it working nearly straight away.
Unloading is not supported by the standard DXEloading unit, but can be easily added, and I will do that next.
Unfortunately, it will break the interface of the current DXELOAD unit.
I uploaded a extremely simple demo with everything needed to demonstrate DXE except a working 1.0.4 Go32V2 release to
http://www.stack.nl/~marcov/dxedemo.zip
Archive: dxedemo.zip
Length Method Size Ratio Date Time CRC-32 Name -------- ------ ------- ----- ---- ---- ------ ---- 223 Defl:N 123 45% 07-20-01 11:38 b23d4456 ADD.PP 136 Defl:N 115 15% 07-20-01 12:16 b4e5e883 adddemo.pp 83 Defl:N 61 27% 07-20-01 12:17 fa40e4f7 CREATE.BAT 151 Defl:N 110 27% 08-25-99 05:45 57f4c0c7 dxe.ld 87552 Defl:N 49084 44% 01-04-00 14:35 d6e7f05f dxegen.exe -------- ------- --- ------- 88145 49493 44% 5 files
add.pp is the unit to be converted to DXE. It contains one function that adds two numbers.
adddemo.pp is the demo that loads add.dxe
create.bat generates the .DXE. Simply unpack the zip, and run this batchfile, and then the generated adddemo.exe
dxe.ld needed linker script
dxegen.exe DJGPP DXE generator tool.
--------------------------------------------------------------------
Some points about DXE:
- The code loaded has to be totally self contained, and a unit. You cannot call any RTL procedures directly from the DXE, you can also not call DXE directly from the mainprogram. However the mainprogramma can pass you pointers to e.g. GETMEM and FREEMEM so that you can allocate/deallocate memory. Don't forget that a lot of actions (string manipulation, exceptions using int64 etc implicitely call RTL procedures)
One can in theory link the needed RTL functionality in the DXE.
- One can only pass ONE pointer from the DXE to the main program on load. Nothing more. I'm studying on a system to enhance this at the moment. For the experimentors: Let this pointer point to a structure or function that can return more pointers to structures and functions. Via parameters to such functions, you can load global variables in the DXE with needed RTL functions.
