DLL中的函数返回string类型,在Delphi中动态调用时可以得到正确结果,在关闭程序是提示错误:Invalid pointer operation
在网上搜索了一圈,均指向内存泄露,以及下面的解决方法:
Windows中如果一个动态库导出函数以参数形式传递或者返回了一个长字符串或者 动态数组(无论是直接传递还是包含在一个对象中),那么动态库以及其调用程序都必须得引用ShareMem单元。同样,如果程序或者库通过New或者 GetMem申请了内存,并且该内存在另一个模块中通过Dispose或FreeMem释放,也得这么做。务必把ShareMem放在程序或者库所有引用 单元之首。
ShareMem是BORLANDMM.dll内存管理单元接口,它允许模块间共享动态申请内存。BORLANDMM.dll必须与使用了改单元的程序或者Dll一块儿部署。当程序或者动态库使用了ShareMem,其内存管理将会由BORLANDMM.dll接管。
注意:在dpr文件的uses语句的开头加上ShareMem,以及DLL中的uses语句开头加上ShareMem。
来源:https://www.cnblogs.com/fred-rk/archive/2012/12/16/2820836.html