[fpc-pascal] Ansistrings DLL/DSO hack (memory manager)
L505
fpc505 at z505.com
Wed Jan 25 08:39:20 CET 2006
Trustmaster sends me a trick/hack (as shown below) to avoid using CMEM in a
dll/dso in order to get ansistrings working through a dll/dso.
Comments? Find anything that could possibly be wrong with this trick we pull off?
i.e. the ability to use strings in a DLL/DSO without ever using Pchars, nor CMEM!
The trick/hack:
> Hi Lars,
>
> I've just read an article how to solve the memory management problem with FPC
> without using CMEM unit. It is done by exporting memory manager in the
> library and using it everywhere simply this way:
>
> // psplib.pp
> {$H+}
> {$MODE OBJFPC}
> library psplib;
> { ... }
> procedure GetMemMan (out MemMan : TMemoryManager); stdcall; export;
> begin
> GetMemoryManager (MemMan)
> end;
> { ... }
> exports
> { ... }
> GetMemMan name 'GetSharedMemoryManager';
> { ... }
> end.
>
> // pspunit.pp
> {$H+}
> {$MODE OBJFPC}
> unit pspunit;
> interface
> { ... }
> implementation
> { ... }
> procedure GetMemMan (out MemMan : TMemoryManager); stdcall; external 'psplib'
> name 'GetSharedMemoryManager';
> var MemMan : TMemoryManager;
> { ... }
> initialization
> GetMemMan(MemMan);
> SetMemoryManager (MemMan);
> { ... }
> end.
>
> // pspapp.pp
> {$H+}
> {$MODE OBJFPC}
> program pspapp;
> uses pspunit;
> { ... }
> begin
> { ... }
> end.
Lars' comments:
Seems to make a simple hello world project with strings in it work as a DLL/DSO for
now without requiring Cmem, but further testing will need to be done. I will throw up
a PasForum clone (code named Bubble2) using this tactic, and see what happens with
this
sort of set up.
When using no shared memory manager and using strings, PasForum (code named Bubble)
would
run but random access violations would occur every so often. I assume this is why the
PSP4UM (psp.furtopia.org) has been running without issue for several while now,
because it does work,
sort of - but obviously not recommended.
More information about the fpc-pascal
mailing list