问题

使用Delphi开发应用时,如果要在主程序dll间传递字符串对象等不兼容C的类型时,通常需要在主程序dll工程的uses区第一个位置引用ShareMem单元,并将borlndmm.dll随应用一起发布使用。

Lazarus中也有ShareMem单元,说明也可以采用相同的策略解决同样的需求,但是并不是使用borlndmm.dll

在源码sharemem.pp中可以看到const fpcmemdll = 'fpcmemdll.dll';,说明使用的是fpcmemdll.dll,但是这个dll实际上是并不存在的!

解决

全盘搜索并没有找到fpcmemdll.dll,但是却找到了fpcmemdll.pp

打开fpcmemdll.pp后发现,其实这并不是一个普通的用于uses的单元,而是一个library工程单元,那么问题就好办了。

  1. 创建一个空白library工程,并命名为fpcmemdll

  2. 复制fpcmemdll.pp内容到fpcmemdll.lpr

  3. 构建fpcmemdll.lpr得到fpcmemdll.dll

其它

linux平台似乎并没有ShareMem单元,也不存在以上用法,应该是只有windows平台才要这样用。