{Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters.}
关于DLL内存管理的重要说明:如果你的DLL导出任何程序或将字符串作为参数或函数结果传递的函数,ShareMem必须是库中的第一个引用单元(USES子句)和您的项目(选择 Project-View Source)USES子句。 这个适用于传递到DLL或从DLL传递的所有字符串 - 即使是那些嵌套在记录和类中。 ShareMem是接口单元BORLNDMM.DLL共享内存管理器,必须部署于你的DLL。为避免使用BORLNDMM.DLL,传递字符串信息的时候需要使用PChar或ShortString参数来代替string;
这是使用Delphi开发DLL程序时系统自带的一个说明,仔细研读一下此说明会发现很多以前出现的问题及错误系统早已给出提示,只是当时并未注意及研究;